Por que isso é legal em C?

stou escrevendo um compilador C de brinquedo para um curso de compilador / idioma na minha universidad

Estou tentando detalhar a semântica para a resolução de símbolos em C e criei este caso de teste que eu tentei contra os compiladores regulares clang & gcc.

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

maioria dos compiladores parece avisar sobre argumentos estranho

Pergunta: Qual é o raciocínio fundamental por trás disso?

Para minha fase de geração / resolução da tabela de símbolos, eu estava considerando uma função como um símbolo com um tipo de retorno e vários argumentos parametrizados (baseados na gramática), cada um com um tipo respectiv

Obrigado

questionAnswers(4)

yourAnswerToTheQuestion