繁体   English   中英

赋值语句中右边的增量表达式按哪个顺序求值? 它是未定义的吗?

[英]In which order are the increment expressions on the right evaluated in the assignment statement? Is it undefined?

我最近了解了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;
}

输出:

x = 11
x = 12
y = 12
x = 13

这不是不确定的行为。
首先将x增加到11,打印出来,然后增加到12,打印出来,求值后再增加,所以x为13,整个表达式的结果为12。

这是由于C中的逗号运算符是一个序列点引起的,这意味着可以确保先前评估的所有副作用都已执行,而后续评估尚未执行任何副作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM