用逗号`,`未定义的行为写出3条指令?

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)

Sou*_*osh 6

用逗号分隔多于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

如语法所示,逗号运算符(如本子条款中所述)不能出现在使用逗号分隔列表中的项的上下文中(例如函数的参数或初始化列表).

  • @MOHAMED不,这是有效的.看到强调报价. (2认同)