Существует ли тип по умолчанию для параметров main в ANSI C или gcc просто щедр?

#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 .