Кто определяет приоритет оператора 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 или он определен в математике?

Ответы на вопрос(5)

Ваш ответ на вопрос