See this,
1 2 3 4 5 6 7 8 9 10 | int main() { int x = -1, y = -1, z = 0; printf("%d\n", ++x || ++y && ++z); printf("%d, %d, %d\n", x, y, z); return 0; } |
别说我无聊,没人(正常人)会写出这样的式子,但有些细节知道总比不知道的好。
&&比||优先级高。
但优先级和求值顺序是两码事。
||和&&的求值顺序都是从左到右。其它运算符只有三目运算和逗号运算符有特定顺序,而+ – * /等的操作数均无特定的求值顺序,即f(x) + g(x++)中那个函数首先被调用是未定义的。顺便提一句,函数的参数的求值顺序与其入栈顺序也是无关的,所以f(i++, i++, i++)的行为也是未知的。