所以很多被ISO认为应该拖出去砍死的人都可以正常的写代码...
这个确实是的 谈标准往往会陷入这样一个窘境 明明标准规定这样做是不保证正确的 但由于大多数编译器对某些未定义问题的行为一致
所以就没法谈了 你找不出一个让他们不写这样的代码的理由
比如 y*=y+=y+1; 这样的式子 几乎在所有编译器上的结果都一致 所有就有很多人 能对此作出一番很自信的解释
因为,如果逻辑运算符的每一个单个逻辑判断结果是一定的
我优先做任何判断得到的整个逻辑运算的结果都是一定的
这个不需要我写证明吧...
标准我没有研究过 因为标准也大部分参考了 K&R C ,他对逻辑运算符的求值顺序是明确规定的 考虑的不是从哪边开始算 结果一致不一致的问题
而是 考虑到 某些情况下 在第一个式子不成立的情况下 对第二个式子是不能求值的 比如指针判零 p != NULL && *p > 5 这类的
可能由于标准委员会的强迫症 (要么所有的都有顺序 要么就都没有 有的有 有的没有 就不爽)把他给裁掉了 开玩笑的