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