Почему это разрешено в C?

Я пишу игрушечный компилятор C для компилятора / языкового курса в моем университете.

Я пытаюсь конкретизировать семантику для разрешения символов в C, и придумал этот тестовый пример, который я пробовал против обычных компиляторов clang & gcc.

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

Большинство компиляторов, кажется, предупреждают только о посторонних аргументах.

Вопрос: Какова основная причина этого?

На этапе создания / разрешения моей таблицы символов я рассматривал функцию как символ с возвращаемым типом и несколькими параметризованными аргументами (на основе грамматики), каждый с соответствующим типом.

Спасибо.

16
задан snap 15 March 2011 в 03:58
поделиться