Так как же работает exit ()? - PullRequest
10 голосов
/ 29 мая 2011

Если я использую exit(), GCC не выдает предупреждение:

int main()
{
    exit(EXIT_SUCCESS);
}

Если мы будем использовать любую другую функцию, мы обязательно встретим такое предупреждение:

warning: control reaches end of non-void function

Как exit() заставляет родительскую функцию получить возвращаемое значение без использования return(), что делает компилятор?

Ответы [ 4 ]

12 голосов
/ 29 мая 2011

В GNU libc exit объявлено с __attribute__((__noreturn__)), что говорит gcc, что функция не возвращает.

3 голосов
/ 29 мая 2011

С документы:

Аргумент состояния возвращается в среду хоста.

И

Выдача оператора возврата из основной функции эквивалентна вызову функции выхода с возвращаемым значением в качестве аргумента.

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

0 голосов
/ 29 мая 2011

Проблема в том, что вам не удалось включить stdlib.h, и вы не компилируете с -std=c99.В C99 main неявно возвращает 0, если вы вышли из конца.

0 голосов
/ 29 мая 2011

вместо

 exit(EXIT_SUCCESS);

есть

 return(EXIT_SUCCESS);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...