C中的表达式评估顺序

Bru*_*uce 5 c c89

如果我有以下表达式:

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的序列点的完整列表,可以在这里查看更全面的参考.

  • @Bruce:参见ANSI C草案http://flash-gordon.me.uk/ansi.c.txt,附件A.2 (2认同)