Семантика вызова функции gcc для несоответствия подписи в вызывающем / вызываемом - PullRequest
3 голосов
/ 08 ноября 2010

Я обнаружил что-то странное в gcc и надеюсь получить какую-то информацию, будь то особенность или причуда.
По сути, у меня есть функция, определенная в func.c как

void f(int a, int b, FILE* f)  
{  
   ...  
   ...  
} 

Нет соответствующего заголовкафайл.Но gcc не выдает никаких предупреждений, когда я вызываю f (a, b), а gdb показывает, что f вызывается с тремя параметрами?Почему это так?.Какова семантика для заполнения третьего аргумента.

1 Ответ

4 голосов
/ 08 ноября 2010

Если f() нигде не имеет объявления и не определено в текущей единице компиляции, компилятор предполагает, что f() возвращает int и может принимать любое количество аргументов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...