C具有操作员关联性和优先级的功能评估顺序

时间:2017-10-16 15:23:43

标签: c function

练习C课程的考试复习题。

int c = f1(2,3) * f2(3,4) + f3(4,5);

功能评估的顺序是什么?答案取决于编译器。 我的问题:为什么它不使用*,+运算符的从左到右的关联性和优先级?我将其更改为f1()+ f2()* f3(),并在每个函数中放置了puts(“f1 now)类型命令以进行快速测试。结果是f1,f2,f3的顺序,所以显然没有使用函数评估顺序的运算符关联性和优先级。我正在思考3个函数设置/操作3个全局变量的后果,因此评估顺序很重要。

除了,不要写这样的代码(这是一个练习复习问题),我很困惑为什么运算符优先级/关联性没有规定函数评估的顺序。提前谢谢。

1 个答案:

答案 0 :(得分:4)

运算符优先级和关联性不确定评估顺序。它们只告诉编译器在哪里添加括号。优先级意味着free()被解析为f() + g() * h()。关联性意味着f() + (g() * h())被解析为f() + g() + h()。但在所有这些情况下(即使明确给出了括号),也可以按任何顺序调用函数。

相关问题