This question already has answers here:
Closed 2 years ago.
Why are these constructs using pre and post-increment undefined behavior?
(14个答案)
a = 5;
c = (b =a+2) - (a=1);

在kn king的《c编程的现代方法》一书中,第二条语句的执行效果将导致6或2,因为它是c的未定义行为,但在丹尼斯的《c》一书中,它是从左到右执行的。哪一个是正确的?

最佳答案

在上述情况下,

 c=(b=a+2) -(a=1);

a的值正在被更改和读取,其间没有序列点,因此它是undefined behavior
引用C11,附录J.2,未定义行为
标量对象上的副作用相对于另一个副作用是未排序的
关于同一标量对象或使用同一标量的值计算
反对。
同样相关,来自第6.5章
运算符和操作数的分组由语法指示。85)指定的除外
后来,子表达式的副作用和值计算被取消排序
因此,无法保证哪个子表达式将首先得到求值。

关于c - C语言的优先级顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41327445/

10-11 20:57