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