※ 引述《wtchen (没有存在感的人)》之铭言: 问题点
: ^^^^^^
: 08. 你不可以在一个运算式(expression)中,对一个基本型态的变量修改其值
: ^^^^^^^^^^^^^^^^^^^^^^^^^^
: 超过一次以上。否则,将导致未定义的行为(undefined behavior)
可以改成:
08. 在一个无顺序点 (sequence point) 的表示式 (expression) 中... (略)
原因如下:
int i = 7; int j = (++i, i++); 是合法的,因为顺序点保证了执行的顺序。
^^^^^^^^^^ 1 expression
^^^ ^^^ 2 subexpressions separated by 1 sequence point
不过这个好像也是有点太细节了。
此外,逗号运算符 (operator) 可以当作顺序点,但是逗号分隔符 (separator) 却不能,
因此,函数 function(a, b); 并不保证赋值的顺序是从左到右,可能是乱序,或是逆序。
所以,把上述的问题放在错误例子(最后两个)有点怪,
因为,会发生错误的原因跟一个表示式中修改两次值无关,
然而,相反的,函数 function 中,a 与 b 是两个不同的表示式,
只是那两个表示式之间并没有顺序点来保证 a 与 b 之间执行的顺序。