子表达式评估顺序

时间:2009-11-16 23:16:50

标签: c c99 standards

我在J.1未指明的行为下查看了SO/IEC 9899:201x

"The order in which subexpressions are evaluated and the order in which side effects
take place, except as specified for the function-call (), &&, ||, ?:, and comma
operators (6.5)."

这是否意味着在

func1() + func2();

func2()可以在func1()之前执行,或者甚至在func1()期间执行?

2 个答案:

答案 0 :(得分:4)

在当前标准(ISO / IEC 9899:1999)中,函数调用之间存在一个序列点,但未指定操作数到+的评估顺序,因此可以调用func1之前的func2func1之后,但函数调用不得以任何方式重叠或交错。

这意味着func2和{{1}}中的每一个都可以根据需要与某些共享数据进行交互,而不会以意外的方式在其下更改数据。

答案 1 :(得分:1)

不是在期间,但是肯定是1或2或2然后是1。