I am writing a toy C compiler for a compiler/language course at my university.

I'm trying to flesh out the semantics for symbol resolution in C, and came up with this test case which I tried against regular compilers clang & gcc.

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

Most compilers only seem to warn about extraneous arguments.

Question: What is the fundamental reasoning behind this?

For my symbol table generation/resolution phase, I was considering a function to be a symbol with a return type, and several parametrized arguments (based on the grammar) each with a respective type.

Thanks.

Edit
Report