¿Quién define la precedencia del operador C y la asociatividad?

Introducción

En cada libro de texto en C / C ++, encontrará una tabla de precedencia y asociación de operadores, como la siguiente:

http://en.cppreference.com/w/cpp/language/operator_precedence

Una de las preguntas en StackOverflow hizo algo como esto:

¿Qué orden ejecutan las siguientes funciones?

f1() * f2() + f3();
f1() + f2() * f3();

Refiriéndome al gráfico anterior, respondí con confianza que las funciones tienen asociatividad de izquierda a derecha, por lo que en las declaraciones anteriores se evalúan de esta manera en ambos casos:

f1 () -> f2 () -> f3 ()

Después de evaluar las funciones, finaliza la evaluación de esta manera:

(a1 * a2) + a3
a1 + (a2 * a3)

Para mi sorpresa, muchas personas me dijeron que estaba totalmente equivocado. Decidido a probar que estaban equivocados, decidí recurrir al estándar ANSI C11. Me sorprendió una vez más descubrir que se menciona muy poco sobre la precedencia y la asociatividad del operador.

PreguntasSi mi creencia de que las funciones siempre se evalúan de izquierda a derecha es incorrecta, ¿qué significa realmente la tabla que se refiere a la precedencia y asociatividad de la función?¿Quién define la precedencia y la asociatividad del operador si no es ANSI? Si es ANSI quien hace la definición, ¿por qué se menciona poco sobre la precedencia y la asociatividad del operador? ¿Se deducen la precedencia y la asociatividad del operador del estándar ANSI C o se define en Matemáticas?

Respuestas a la pregunta(5)

Su respuesta a la pregunta