¿Por qué es legal en C?

Estoy escribiendo un compilador de juguete C para un curso de compilador / idioma en mi universidad.

Estoy tratando de desarrollar la semántica para la resolución de símbolos en C, y se me ocurrió este caso de prueba que probé contra compiladores regulares clang & gcc.

void foo() { }
int main() { foo(5); } // foo has extraneous arguments

a mayoría de los compiladores solo parecen advertir sobre argumentos extraños.

Pregunta: ¿Cuál es el razonamiento fundamental detrás de esto?

ara mi fase de generación / resolución de la tabla de símbolos, estaba considerando una función como un símbolo con un tipo de retorno y varios argumentos parametrizados (basados en la gramática), cada uno con un tipo respectivo.

Gracias

Respuestas a la pregunta(4)

Su respuesta a la pregunta