Re: [問卦] C語言沒人用goto?已回收
這文有點久 講下本人經驗
若你代碼 有很多初始化與階斷性處理
那就用goto吧
ex:
狀態 搖桿已初始 = 否;
void 搖桿驅動初始化()
{
if(無== 確認裝置是否存在())
goto 搖桿無效;
if(是 == 搖桿是否太小())
goto 搖桿無效;
if(無 == 有無庫存())
goto 搖桿無效;
if(失敗 == 啟用電腦())
goto 搖桿無效;
if(找不到 == 尋找日本片())
goto 關閉電腦;
if(是 == 有無穿褲())
脫褲();
if(痛 == 稍摸搖桿())
{
/* 嚴重錯誤 直接跳出 */
return;
}
/*初始化已完成*/
搖桿已初始 = 是;
return;
關閉電腦:
關電腦() ;
搖桿無效:
搖桿已初始 = 否;
return;
}
若是真的不想用goto 也可以用do while(0);
void 搖桿驅動初始化()
{
do
{
if(無== 確認裝置是否存在())
break;
if(是 == 搖桿是否太小())
break;
if(無 == 有無庫存())
break;
if(失敗 == 啟用電腦())
break;
if(找不到 == 尋找日本片())
break;
if(是 == 有無穿褲())
脫褲();
/*初始化已完成*/
搖桿已初始 = 是;
return;
}while(0);
if(是 == 電腦已開啟())
關電腦();
搖桿已初始 = 否;
return;
}
用do while(0) 不會比較好 只是避開goto爾
簡單講 若是要層層檢查 失敗若要處理一堆
那就大方用下去吧 用goto代碼不會比較難維護
反是用do..while(0)是在裝神弄鬼
※ 引述《bencert (根本ㄏㄏ)》之銘言:
: 小弟我剛剛想起來
: C語言有種用法是goto
: 但是上程式設計的課老師也跳過不教
: 我看也沒人用過goto
: 有沒有C語言GOTO的八卦?
: -----
: Sent from JPTT on my Samsung SM-G930F.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.60.48
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1513576988.A.940.html
※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:06:17
→
12/18 14:03,
6年前
, 1F
12/18 14:03, 1F
→
12/18 14:04,
6年前
, 2F
12/18 14:04, 2F
→
12/18 14:05,
6年前
, 3F
12/18 14:05, 3F
推
12/18 14:05,
6年前
, 4F
12/18 14:05, 4F
→
12/18 14:05,
6年前
, 5F
12/18 14:05, 5F
→
12/18 14:06,
6年前
, 6F
12/18 14:06, 6F
推
12/18 14:06,
6年前
, 7F
12/18 14:06, 7F
→
12/18 14:07,
6年前
, 8F
12/18 14:07, 8F
推
12/18 14:07,
6年前
, 9F
12/18 14:07, 9F
→
12/18 14:07,
6年前
, 10F
12/18 14:07, 10F
不行 要錯誤處理 好比穿褲 吃藥這類
※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:08:46
推
12/18 14:08,
6年前
, 11F
12/18 14:08, 11F
→
12/18 14:08,
6年前
, 12F
12/18 14:08, 12F
→
12/18 14:09,
6年前
, 13F
12/18 14:09, 13F
不同層度的錯誤怎能統一處理?
穿褲與關電腦就完全不一樣啊
※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:10:03
→
12/18 14:11,
6年前
, 14F
12/18 14:11, 14F
→
12/18 14:11,
6年前
, 15F
12/18 14:11, 15F
→
12/18 14:13,
6年前
, 16F
12/18 14:13, 16F
推
12/18 14:14,
6年前
, 17F
12/18 14:14, 17F
不可能沒路走
我文重點是 do ...while(0) 可以完全取代 goto
只是這樣代碼反變冗 沒意義
※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:15:37
噓
12/18 14:16,
6年前
, 18F
12/18 14:16, 18F
推
12/18 14:17,
6年前
, 19F
12/18 14:17, 19F
→
12/18 14:18,
6年前
, 20F
12/18 14:18, 20F
冗度大增 比do..while(0) 更慘
※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:18:54
推
12/18 14:20,
6年前
, 21F
12/18 14:20, 21F
→
12/18 14:21,
6年前
, 22F
12/18 14:21, 22F
推
12/18 14:26,
6年前
, 23F
12/18 14:26, 23F
→
12/18 14:27,
6年前
, 24F
12/18 14:27, 24F
推
12/18 15:04,
6年前
, 25F
12/18 15:04, 25F
推
12/18 15:07,
6年前
, 26F
12/18 15:07, 26F
噓
12/18 15:35,
6年前
, 27F
12/18 15:35, 27F
討論串 (同標題文章)