#c #gcc #compilation
#c #gcc #Сборник
Вопрос:
Я скопировал пример, начинающийся с
main (t) {
Итак, при компиляции с помощью gcc -pedantic я ожидал, по крайней мере, компиляции о
— отсутствующем типе возврата main (который пришел)
— отсутствующем типе для ‘t’ — ничего, ни с -Wall, ни с -pedantic .
Это просто немного щедро со стороны gcc или в стандарте есть тип по умолчанию? Пока ничего не удалось найти.
Спасибо!
Ответ №1:
Стандарт не предусматривает main
функции с 1 параметром — для этого требуются две формы, одна с 0 и одна с 2. Реализации разрешены для разрешения других.
Итак, GCC делает что-то зависящее от реализации, чтобы разрешить это, даже если вы указали тип.
C89 допускает параметры без объявленного типа, по умолчанию int
имеющие значение . То же самое относится к переменным и функциям без объявленного возвращаемого типа (они возвращают int
). C99 не допускает никаких int
типов по умолчанию (и GCC диагностирует его с -pedantic -std=c99
помощью).
Комментарии:
1. Обратите внимание, что правило неявного ввода C89 применяется как к параметрам, так и к функциям; в вашем объявлении оба
main
иt
по умолчаниюint
.