如果我有以下表达式:
c = (a) * (b)
Run Code Online (Sandbox Code Playgroud)
C90标准对子表达式'a'和'b'的顺序评估有什么看法?
Jas*_*son 11
由于乘法运算符不是序列点,因此没有指定的顺序.序列点包括逗号运算符,完整表达式的结束和函数调用.因此评估的顺序(a)和(b)编译器实现的顺序.因此,您不应该尝试做一些(a)会产生副作用的东西(b),以便产生有效的结果.
例如:
int a=5;
int b = (a++) * (a++); //<== Don't do this!!
Run Code Online (Sandbox Code Playgroud)
如果您想要C的序列点的完整列表,可以在这里查看更全面的参考.