Книга: Linux программирование в примерах
9.1.5.2. Возвращение из main()
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 этого не делает.
- Возвращение символа
- 4 Формирование культуры инноваций. Возвращение к основным принципам
- Глава 18 Возвращение AT&T
- MainWindow
- Your Own Domain Name and Third-Party DNS
- Providing DNS for a Real Domain with BIND
- Providing DNS for a Real Domain
- Registering the Domain
- Maintaining Accurate Serial Numbers
- Using Single Quotes to Maintain Unexpanded Variables
- Maintaining yum
- 5.2.2. Kernel Startup: main.c