Порядок оценки и ассоциативность - это две разные вещи, возьмите пример:
int x = func1() - func2() - func3(); //having int return types
В этом выражении вы не можете знать, будет ли func1()
оцениваться первым или последним, то есть вы не Я знаю, какая функция будет вызвана и вернет ее значение первой, однако вы знаете, что ассоциативность, как и в случае +
, будет выполняться слева направо, сначала func1() - func2()
, затем результат этого вычитания - func3()
.
В C нет концепции оценки слева направо или справа налево, которую не следует путать с чтением слева направо и справа налево. ассоциативность операторов: выражение f1() + f2() + f3()
анализируется как (f1() + f2()) + f3()
из-за ассоциативности слева направо operator+
, но вызов функции f3()
может оцениваться первым, последним или между f1()
или f2()
во время выполнения.
https://en.cppreference.com/w/c/language/eval_order