Re: [問題] 類別跟迴圈加不加分號的問題

作者: SeamusBerloz (軒摩斯)   2019-01-14 20:08:49
大括號 {},也就是指區塊。
區塊本身不需要分號結尾。
要不要加分號結尾?不需要猜,只要記得,
敘述、宣告才要加分號結尾。
以下 {} 故意寫成一行,用於說明區塊的效果。
多個敘述、宣告可以用 {} 包起來,視為一整體 (或單一行) 看待:
i = i + 1;
k += i * 10;
j = foo(k);
若改成:
{i = i + 1; k += i * 10; j = foo(k);}
區塊沒有分號結尾。
while / do-while 敘述則是:
do 單行敘述; while(條件);
作者: cole945 (躂躂..)   2019-01-14 21:12:00
呃..被講完了..只好推囧
作者: x246libra (楓)   2019-01-14 22:54:00
完美解說
作者: me8z7gnk (SONG-SONG)   2019-01-15 00:59:00
謝謝解說我多年的疑惑解說太完整了 完全解答
作者: CoNsTaR ((const *))   2019-01-15 13:06:00
在不加分號的地方加,對編譯器來講那個分號就是空敘述單純這樣而已吧,沒有那麼複雜啊 orz所以你要在 block 後面加 100 個分號編譯器也不會管你因為通通都是空敘述,都是業障
作者: LPH66 (-6.2598534e+18f)   2019-01-15 13:23:00
補充一個:lambda 先寫起來放的時候也是因宣告變數故要分號auto lambda=[](){return 42;}; //這裡指左邊第二個分號對於這個我個人習慣是會先把 {}; 打好再寫裡面在只有 {} 沒有內容時很容易知道這裡是不是該加分號的地方
作者: me8z7gnk (SONG-SONG)   2019-01-15 21:36:00
謝謝C大跟L大 我原本一直卡在類別為什麼結尾要加分號現在看完這篇 豁然開朗阿!
作者: cole945 (躂躂..)   2019-01-16 08:24:00
本文有舉例結尾分號有差.if(){};;;else{}不行多加分號會影響parsing,並非全無意, do{}while();在macro很好用.可以看https://kernelnewbies.org/FAQ/DoWhile0裡的例子
作者: SeamusBerloz (軒摩斯)   2019-01-16 09:40:00
作者: me8z7gnk (SONG-SONG)   2019-01-16 20:29:00
謝謝col大跟Se大提醒因為之前被教說能使用inline就使用 inline所以只把呼叫 macro 最後不能加分號背起來並沒有了解原意 現在才了解do while(0) 之前看過以為只做一次沒什麼特別原來是用在 macro 上 這麼好用
作者: TitanEric (泰坦)   2019-01-18 00:31:00
大推
作者: hohamita (HOHA)   2019-01-18 13:37:00
推 感謝解說!

Links booklink

Contact Us: admin [ a t ] ucptt.com