Кто определяет приоритет оператора C и ассоциативность?
В каждом учебнике по C / C ++ выВы найдете таблицу приоритетов операторов и ассоциативности, например:
http://en.cppreference.com/w/cpp/language/operator_precedence
Один из вопросов о StackOverflow задавался примерно так:
В каком порядке выполняются следующие функции:
f1() * f2() + f3();
f1() + f2() * f3();
Ссылаясь на предыдущую диаграмму, я уверенно ответил, что функции имеют ассоциативность слева направо, поэтому в предыдущих выражениях они оценивались следующим образом:
f1 () -> f2 () -> f3 ()
После оценки функций вы заканчиваете оценку следующим образом:
(a1 * a2) + a3
а1 + (а2 * а3)
К моему удивлению, многие люди говорили мне, что я совершенно не прав. Решив доказать, что они не правы, я решил обратиться к стандарту ANSI C11. Я был еще раз удивлен, обнаружив, что очень мало упомянуто о приоритете операторов и ассоциативности.
ВопросыЕсли мое убеждение, что функции всегда оцениваются слева направо, неверно, что в действительности означает таблица, относящаяся к приоритету функций и ассоциативности?Кто определяет приоритет оператора и ассоциативность, если это 'не ANSI? Если определение определяет ANSI, почему мало упоминается о приоритетности операторов и ассоциативности? Является ли приоритет оператора и ассоциативность выводом из стандарта ANSI C или он определен в математике?