关于操作数求值顺序的矛盾

Ula*_*gin 4 c recursion operator-precedence operands c-standard-library

当我从 deitel c 学习 C 中的递归函数时,我读到了这句话:

标准 C 没有指定大多数运算符(包括 +)的操作数的计算顺序。

但书中也说:

'+' 从左到右的结合性

操作数的计算顺序:

操作数的计算顺序

谁能解释一下这是为什么?

ana*_*ciu 6

求值顺序和关联性是两个不同的东西,举个例子:

int x = func1() - func2() - func3(); //having int return types
Run Code Online (Sandbox Code Playgroud)

在这个表达式中,你不知道是func1()先求值还是最后求值,这意味着你不知道哪个函数会被调用并首先返回它的值,但是你知道关联性,如 with +,将是 left-to-对,首先func1() - func2()是减法的结果- func3()

C 中没有从左到右或从右到左求值的概念,不要与运算符的从左到右和从右到左结合性混淆:表达式f1() + f2() + f3()被解析为(f1() + f2()) + f3()由于左的 -to-right 关联性operator+,但f3()可以首先、最后f1()f2()在运行时之间或在运行时计算对的函数调用。

https://en.cppreference.com/w/c/language/eval_order