iT邦幫忙

DAY 30
1

21世紀C語言實作及感想系列 第 30

21世紀C語言之30: switch

作者對switch的建議,就是盡量不用,

Instead, here is much simpler advice: don’t use switch .

他舉了一個例子,

char c;
while ((c = get_opt(...))){
switch(c){
case 'v':
verbose++;
break;
case 'w':
weighting_function();
break;

case 'f':
fun_function();
break;
}
}

這段CODE 突顯了,忘了寫break;會導致程式跑的意思和想要的結果不一樣。

而break;會因為case的數目,而反覆出現多次。

作者建議用IF來改寫。

char c;
while ((c = get_opt(...))){
if (c == 'v')
verbose++;
else if (c == 'w') weighting_function();
else if (c == 'f') fun_function();
}

不知各位覺得如何?


上一篇
21世紀C語言之29: enum
系列文
21世紀C語言實作及感想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
rayjer65
iT邦新手 1 級 ‧ 2014-11-02 21:32:30

我看範例碼還是看不出來為何不要用 switch的理由。 如果是因為會忘記寫 break,那是紀律的問題。 其實用 if , else if 這樣的多層結構,可讀性是更差,而且如果要改變判斷及處理的優先次序,用if會超難改,如果是用switch,只要整塊搬到前面就好。
switch 的編譯結果也不會輸if 的,如果是兩三個case, 其實編譯器會用 if 的判斷模式來作,如果有一大堆case的話,就會直接用查表法來作,所以效率上是不用擔心的。
如果被判斷的參數只有一個,狀況又會超過三個的,我會毫不考慮用 switch 方法,就是因為程式很容易看得懂。

0
krarm
iT邦好手 1 級 ‧ 2014-11-03 15:15:13

同意樓上!!!!

break有時也故意不寫!但對於初學者的確容易混淆!

當分支超過五、六層時,switch的可讀性還是優於if。

rayjer65 iT邦新手 1 級 ‧ 2014-11-05 09:14:24 檢舉

100%同意,如果有部分動作會跟另一個case重複,就可以跟下一個case共用,不只是省break,更是實際省code.

我要留言

立即登入留言