Программа, которая может выполнить вызов функции с неверными аргументами, не является строго соответствующей, но строго соответствующая программа может содержать такие вызовы функций, если они никогда не выполняются; следовательно, само существование таких вызовов функций не может помешать соответствующему компилятору правильно обработать программу, содержащую их.

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

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

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

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

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

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

Благодарю.

Ответы на вопрос(4)

Ваш ответ на вопрос