Неявное объявление в C - PullRequest
4 голосов
/ 20 августа 2010

Следующая программа вызывает Undefined Behaviour в C?

int main()
{
    printf("Printf asking: Where is my declaration ?");
}

В вышеприведенной программе есть неявное объявление printf(), поэтому приведенный выше код полностью совместим со стандартом или просто имеет специфическое поведение для реализации?

1 Ответ

7 голосов
/ 20 августа 2010

Да, это так. Отсутствие декларации в области видимости является UB.

J.2 Неопределенное поведение

- Для вызова функции без прототип функции в области, где функция определяется функцией прототип, либо прототип заканчивается с многоточием или типами аргументы после продвижения не являются совместим с типами параметры (6.5.2.2).

Кроме того, обратите внимание, что падение с main нормально в C99 (то есть семантически эквивалентно return 0;). Для компиляторов, предшествующих C99, вам нужен оператор return, где тип возврата основной функции - это тип, совместимый с int.

...