【发布时间】:2017-01-12 00:53:22
【问题描述】:
我正在阅读“C 编程语言”一书,我遇到了以下行(释义):
"...在表达式中,例如 x = f() + g();
f() 可能在 g() 之前调用,反之亦然。 C没有指定顺序 将在其中计算操作数..."
但是,根据优先级和关联规则,函数调用不是具有最高优先级吗?而且,由于函数调用运算符() 的关联性是从“左到右”,不应该在g() 之前调用f()(绝对)?
【问题讨论】:
-
函数调用是从左到右关联。因此,函数运算符与
f而不是+相关联。下一个求值是加法运算符,对its个操作数的求值顺序没有指定;因此,可以先调用任何一个。 -
本书试图解释你不应该依赖于一个函数的副作用。
-
这与优先级或关联性无关。问题是
+的操作数以未指定的顺序进行评估。优先级指定哪些操作数与哪些运算符相关联;它没有指定在运行时计算这些操作数的顺序。
标签: c