Что должен вернуть main() в C и C++?

Принятый ответ, похоже, предназначен main для C++, поэтому я подумал, что return-type добавлю ответ, относящийся c++ к C, и это несколько отличается. Также c были внесены некоторые изменения c++ между ISO / IEC 9899: 1989 main (C90) и ISO / IEC 9899: 1999 return-value (C99).

main() следует объявить как:

int main(void)
int main(int argc, char **argv)

Или c аналогичный. Например, int main(int argc, char *argv[]) эквивалентен cpp второму. В C90 тип возвращаемого main значения int можно опустить, поскольку return-type он является значением по c++ умолчанию, но в C99 и новее return-value тип возвращаемого значения return-type int нельзя опускать.

Если реализация cpp позволяет это, main() можно объявить cpp другими способами (например, int main(int argc, char *argv[], char *envp[])), но return-value это делает реализацию программы return-value определенной и больше не cxx соответствует строго.

Стандарт c++ определяет 3 значения для cpp возврата, которые строго cxx соответствуют (то есть не cxx зависят от поведения, определенного cpp реализацией): 0 и EXIT_SUCCESS для успешного return-type завершения и EXIT_FAILURE для неудачного return-type завершения. Любые другие main значения являются нестандартными return-type и определяются реализацией. В return-value C90 main() должен иметь явный оператор c return в конце, чтобы избежать return-type неопределенного поведения. В c C99 и новее вы можете опустить return-type оператор возврата из main(). Если cxx вы это сделаете и main() закончил, появится main неявный return 0.

Наконец, с точки main зрения стандартов, нет ничего return-type плохого в вызове main() рекурсивно из программы return-value на языке C.

c++

c

return-value

main

return-type

2022-11-11T07:29:41+00:00