MOH*_*MED 2 c comma-operator undefined-behavior
我认为我在某处看到用逗号分隔的多于1条指令,是未定义的行为.
那么以下代码是否会生成未定义的行为?
for (i=0, j=3, k=1; i<3 && j<9 && k<5; i++, j++, k++) {
printf("%d %d %d\n", i, j, k);
}
Run Code Online (Sandbox Code Playgroud)
因为有3条用逗号分隔的指令,:
i++, j++, k++
Run Code Online (Sandbox Code Playgroud)
用逗号分隔多于1条指令,是未定义的行为.
不,这不是一般情况.
在你的情况下,i++, j++, k++是完全有效的.
FWIW,根据C11章节§6.5.17,逗号运算符(强调我的)
逗号运算符的左操作数被计算为void表达式; 它的评估与右操作数之间存在一个序列点.然后评估右操作数; [...]
[注意]:你可能会因为看到某些内容而感到困惑
printf("%d %d %d", i++, ++i, i);
Run Code Online (Sandbox Code Playgroud)
一种说法,但请注意,,完全没有逗号运算符(而是提供参数的分隔符),并且不会发生排序.所以,那些陈述是 UB.
再次,参考同一章的标准脚注3
如语法所示,逗号运算符(如本子条款中所述)不能出现在使用逗号分隔列表中的项的上下文中(例如函数的参数或初始化列表).
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |