Выход из функции в C - PullRequest
       13

Выход из функции в C

8 голосов
/ 07 сентября 2010

В чем разница между exit () , _exit () и _Exit () в C?

Как мне решить, какой использовать?

На баш,

человек 2, выход

дал мне страницу _EXIT (2), тогда как

человек 3, выход

дал страницу EXIT (3).

Ответы [ 4 ]

7 голосов
/ 07 сентября 2010

Нормативными в C99 являются exit и _Exit.

Разница между ними заключается в том, что exit также выполняет обработчики, которые могут быть зарегистрированы с помощью atexit, и закрывает потоки и т. Д., Тогда как _Exit не вызывает подпрограммы atexit и может или не может правильно закрыть потоки. .

_exit из POSIX и имеет свойства, аналогичные _Exit, с той разницей, что гарантированно правильно закрываются потоки.

Таким образом, когда вы можете использовать exit, это самый чистый способ прекратить.

7 голосов
/ 07 сентября 2010

exit() завершается после очистки.

_exit() завершается сразу после вызова.

Если у вас поврежден какой-то стек во время вызова функции exit(), программа может закрыться с ошибкой сегментации,если вы используете _exit(), программа завершается в быстром режиме.

С http://msdn.microsoft.com/en-us/library/6wdz5232.aspx у вас есть

exit() - выполняет полные процедуры завершения библиотеки C, завершает процесс,и завершает работу с предоставленным кодом состояния.

_exit() - выполняет процедуры быстрого завершения работы библиотеки C, завершает процесс и завершает работу с предоставленным кодом состояния.

_cexit() - выполняет завершение Cпроцедуры завершения библиотеки и возвращаются вызывающей стороне, но не завершают процесс.

_c_exit() - выполняет процедуры быстрого завершения библиотеки C и возвращаются вызывающей стороне, но не завершают процесс.

1 голос
/ 07 сентября 2010

От человека:

выход:Все функции, зарегистрированные с помощью atexit (3) и on_exit (3), вызываются в обратном порядке их регистрации ... Все открытые потоки stdio (3) сбрасываются и закрываются.Файлы, созданные tmpfile (3), будут удалены.

_exit:Функция _exit () похожа на exit (3), но не вызывает никаких функций, зарегистрированных с помощью atexit (3) или on_exit (3).Сбрасывает ли он стандартные буферы ввода-вывода и удаляет временные файлы, созданные с помощью tmpfile (3), зависит от реализации.С другой стороны, _exit () закрывает дескрипторы открытых файлов ...

0 голосов
/ 07 сентября 2010

1.exit (): это очистка работы, как закрытие файлового дескриптора, файлового потока и так далее, 2._exit (): это не очистка работы, как закрытие файлового дескриптора, файлового потока и т. д.

В этом и заключается основное отличие exit () и _exit ().

Я исправил твой ответ

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