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

这段代码是:

y = x = x + 1; 

C中的未定义行为?

回答你的问题
没有。

会发生什么
这将发生:

 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); 

不,你的表达是正确定义的。 您可能正在寻找y = x = x++; ,不是。

不。你只修改一次x ,并且由于=的右关联性,赋值发生在赋值给y之前。 即使它确实发生过,但仍然只有一个x修改。 您的陈述与y = ++x一样合法。