是`y = x = x + 1;`未定义的行为?

时间:2011-02-05 22:56:54

标签: c undefined-behavior

这是代码:

y = x = x + 1;

C中未定义的行为?

3 个答案:

答案 0 :(得分:32)

回答您的问题
否。

会发生什么
这将发生:

int x = 1; /* ASSUME THIS IS SO */
y = x = x + 1;

/* Results: */
y == 2;
x == 2;

如何编译
同样如下:

x += 1;
y = x;

为什么这不是未定义的
因为您没有在同一个表达式中编写x,所以您可以阅读它。您只需将其设置为自己+ 1,然后将y分配给x的值。

您的未来
如果您发现代码令人困惑,可以使用括号来提高可读性:

y = x = (x + 1);

答案 1 :(得分:17)

不,您的表达式已正确定义。您可能正在寻找y = x = x++;,但事实并非如此。

答案 2 :(得分:9)

没有。您只需修改x一次,并且由于=的正确关联性,分配发生在y之前。即使它确实发生过,但仍然只有x的一个修改。您的陈述与y = ++x一样合法。

相关问题