Rüp*_*ure 5 c comma-operator sequence-points
以下两个代码块完全相同并实现相同的功能吗?它在运行程序时显示相同的内容,但我要感谢一些严格的解释.
for(i=1;i<=10;i++)
{
printf("%d\n",i);
}
Run Code Online (Sandbox Code Playgroud)
和
for(i=1;i<=10;printf("%d\n",i),i++);
Run Code Online (Sandbox Code Playgroud)
该for环路期望有效C语句作为参数,不是吗?但即使我已经在StackOverflow上验证了这样的语句x+=4,y=x*2;是安全的,因为这里的逗号充当了序列点,对于在上面printf("%d\n",i),i++)的for循环中作为参数传递的语句是否相同?
如果是,请费心回答由此产生的小问题:
该comma行为是否在包含许多逗号分隔的语句中作为序列点
函数调用如下:
printf("Enter number\n"),scanf("%d",&number),printf("You entered %d",number);
这是完全有效的,并且这两个语句对于编译器来说都是相同的。对于读者来说,第二个几乎无法阅读,所以这是唯一的区别。使用第二种格式没有什么意义。
序列点由逗号运算符引入。
参考:
6.5.17 逗号运算符
第 2 段:
逗号运算符的左操作数被计算为 void 表达式;它的求值和右操作数的求值之间有一个序列点。然后计算正确的操作数;结果有其类型和值。114)