天天看點

【C primer Plus】為什麼不用 goto?

早期版本的 BASIC 和 FORTRAN 所依賴的 goto 語句,在 C 中仍然可用,但是沒有 goto 語句,C 語言也能運作良好。

goto part;
...
part: prinf("...\n");      

使用 goto 的常見情況以及如何用 C 替代

處理包含多條語句的 if 語句

if (size > 12)
  goto a;
goto b;
a: cost = cost * 1.05;
flag = 2;
b: bill = cost * flag;      
對于以前的 BASIC 和 FORTRAN,隻有跟在 if 條件後面的一條語句才屬于 if,不能使用塊或複合語句。
if (size > 12)
{
  cost = cost * 1.05;
  flag = 2;
}
bill = cost * flag;      

二選一

if (ibex > 14)
  goto a;
sheds = 2;
goto b;
a: sheds = 3;
b: help = 2 * sheds;      
if (ibex > 14)
  sheds = 3;
else
  sheds = 2;
help = 2 * sheds;      

建立不确定循環

readin:scanf("%d", &score);
if (score < 0)
  goto stage2;
lots of statements
goto redin;
stage2: more stuff;      
scanf("%d", &score);
while (score <= 0)
{
  lots of statements
  scanf("%d", &score);
}      

跳轉至循環末尾,并開始下一輪疊代

C 使用 continue 語句代替。

跳出循環

C 語言使用 break 語句,實際上,break 和 continue 是 goto 的特殊形式。使用 break 和 continue 的好處是:其名稱已經表明它們的用法,而且這些語句不使用标簽,是以不用擔心把标簽放錯位置導緻的危險。

繼續閱讀