Возвращает тип main( ) в компиляторе GNU g

#c #g

#c #g

Вопрос:

Согласно ISO_14882_2014

3.6 Запуск и завершение [basic.start]

3.6.1 Основная функция [basic.start.main]

2 Реализация не должна предопределять функцию main. Эта функция не должна быть перегружена. Он должен иметь объявленный возвращаемый тип типа int, но в остальном его тип определяется реализацией.

но в остальном его тип определяется реализацией. Это означает, что компилятор может иметь свой собственный возвращаемый тип для main() . Не могли бы вы указать мне место, где компилятор GNU G сообщает о main() возвращаемом типе.

Комментарии:

1. как насчет документации ?

2. «В противном случае» применяется к типам параметров IIUC

3. В том, что вы нашли, указано, что он должен иметь объявленный возвращаемый тип типа int . Это полная остановка. main всегда должен возвращать int из-за этого предложения. Это параметры, которые определяются реализацией.

4. Я понимаю. запятая (,) после return type of type int, вводит в заблуждение.

5. @UjjwalKumar Не совсем. «но в противном случае» означает «за исключением этого», а не «альтернативно».

Ответ №1:

Возвращаемый тип должен быть int ; «его тип», который следует ниже, относится к main , а не к возвращаемому типу. То есть аргументы, которые main принимают, определены реализацией. Однако каждая реализация должна предоставлять по крайней мере int main() и int main(int, char**) .

Комментарии:

1. Спасибо за ответ. Запятая перед определенной реализацией строкой вводит в заблуждение

Ответ №2:

Предполагается архитектура i386. Из запуска glibc. Мы вызываем __libc_start_main . Из glibc csu / libc-start.c __libc_start_main мы вызываем main с типом указателя int (*main) (int, char **, char **) ( MAIN_AUXVEC_DECL я думаю, что он не должен быть определен на i386, только для powerpc). Таким образом, тип main функции, определенный реализацией, является int main(int, char **, char **) . Из-за того, как работает stack на i386, формы int main(void) и int main() , и int main(int) и int main(int, char**) будут работать. main Возвращаемый тип является int .