mom*_*omo 1 c comma-operator undefined-behavior
我最近在C中学到了未定义的行为,但是这个特定的代码在一个站点中用作"逗号作为运算符"的示例,虽然我理解第2行中的y = x ++,但我不明白子表达式的顺序在第2行进行评估.我认为这是未定义的行为,但我不确定,因为该网站没有提及任何内容.
int main()
{
int x = 10, y;
y = (x++, printf("x = %d\n", x), ++x, printf("x = %d\n", x), x++);
printf("y = %d\n", y);
printf("x = %d\n", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
x = 11
x = 12
y = 12
x = 13
Run Code Online (Sandbox Code Playgroud)
它不是未定义的行为.
首先将x增加到11,打印它,然后将其增加到12并打印,然后在评估后增加它,因此x将为13,整个表达式将评估为12.
这是由于C中的逗号运算符是序列点引起的,这意味着可以保证先前评估的所有副作用都已执行,并且尚未执行后续评估的副作用.