Ответ 1
Если вы проигнорируете список аргументов, разумно и разумно использовать:
int main(void) { ... }
Стандарты благословляют это использование, а также аргументы. Вы получаете предупреждение от GCC, если вы компилируете с помощью -Wstrict-prototypes
и не включаете void
, поэтому я пишу void
. Здесь С++ отличается.
Что касается return EXIT_SUCCESS;
, то, как представляется, в целом ему мало пользы; Я продолжаю писать return 0;
в конце функции main()
, хотя C99 позволяет вам опускать туда какой-либо возврат (а затем ведет себя так, как если бы вы написали return 0;
).
ISO/IEC 9899: 1999
§5.1.2.2.1 Запуск программы
¶1 Функция, вызванная при запуске программы, называется
main
. Реализация не объявляет прототип для этой функции. Он определяется с типом возвратаint
и без Параметры:int main(void) { /* ... */ }
или с двумя параметрами (называемыми здесь
argc
иargv
, хотя любые имена могут быть используются, поскольку они являются локальными для функции, в которой они объявлены):int main(int argc, char *argv[]) { /* ... */ }
или эквивалент; 9) или каким-либо другим способом реализации.
9) Таким образом,
int
может быть заменено на имя typedef, определенное какint
, или типargv
может быть записан какchar ** argv
и т.д.§5.1.2.2.3 Окончание программы
¶1 Если возвращаемый тип функции
main
является типом, совместимым сint
, возврат из начальный вызов функцииmain
эквивалентен вызову функцииexit
со значением возвращаемый функциейmain
в качестве аргумента; 10) достигающий}
, который завершает Функцияmain
возвращает значение 0. Если тип возврата не совместим сint
, статус завершения, возвращенный в среду хоста, не указан.10) В соответствии с §6.2.4, времена жизни объектов с автоматическим временем хранения, объявленные в
main
закончится в первом случае, даже если они не были бы в последнем.§7.20.4.3 Функция выхода
¶5 Наконец, управление возвращается в среду хоста. Если значение статуса равно нулю или EXIT_SUCCESS, форма реализации успешного успешного завершения вернулся. Если значением статуса является EXIT_FAILURE, форма, определяемая реализацией статуса неудачного завершения возвращается. В противном случае возвращается статус от реализации.
Кроме того: обратите внимание, что в §5.1.2.2.3 четко указано, что стандарт C позволяет реализации допускать типы возврата для main()
, отличных от int
(в отличие от стандарта С++, который явно запрещает тип возврата, отличный от int
). Однако, как справедливо указывает Jens, возвращаемый тип не int
из main
разрешен только в том случае, если реализация явно документирует, что это разрешено, и документация, вероятно, установит ограничения на то, что разрешено.