9.1.5.2. Возвращение из main()

We use cookies. Read the Privacy and Cookie Policy

9.1.5.2. Возвращение из main()

Программа может естественно завершиться одним из двух способов: посредством использования одной из описанных далее функций или возвратившись из main(). (Третий, более радикальный способ описан далее в разделе 12.4 «Совершение самоубийства: abort()».) В последнем случае следует использовать явное возвращаемое значение вместо выпадения в конце функции:

/* Правильно */                  /* Неправильно */

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

{                                {

 /* здесь код */                  /* здесь код */

 return 0;                        /* ?? Что возвращает main()? */

}                                }

Стандарт С 1999 г. указывает, что при выпадении в конце, поведение функции main() должно быть таким, как если бы она возвращала 0. (Это верно также для С++; однако, стандарт С 1989 г. намеренно оставляет этот случай неопределенным.) Во всех случаях плохо полагаться на это поведение; однажды вы можете программировать для системы со скудной поддержкой С времени исполнения, или для внедренной системы, или где-то еще, где это будет по-другому. (В общем, выпадение в конце любой функции, не являющейся void — плохая мысль, которая может вести лишь к ошибочному коду.)

Возвращенное из main() значение автоматически передается обратно системе, от которой родительский процесс может его впоследствии получить. Мы опишем, как это делается, в разделе 9.1.6.1 «Использование функций POSIX: wait() и waitpid()».

ЗАМЕЧАНИЕ. На системах GNU/Linux управляемая компилятором команда c99 запускает компилятор с соответствующими опциями, так что возвращаемое значение при выпадении из конца функции равно 0. Простой gcc этого не делает.