这是代码:
y = x = x + 1;
C中未定义的行为?
答案 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
一样合法。