Есть ли разница между return 0
и exit (0)
при использовании в функции?
Если да, когда следует использовать return 0
или exit (0)
в функции?
Разница между "return 0" и "exit (0)"
Ответ 1
return
выходит из функции, а exit
выходит из программы.
В main
функция, выполняющая оператор return 0;
или вызывающая функция exit(0)
, вызовет зарегистрированные обработчики atexit
и вызовет завершение программы.
Ответ 2
exit 0
является синтаксической ошибкой в C. Вы можете иметь exit(0)
, а не вызов стандартной библиотечной функции.
Функция exit
закроет всю программу, возвращая предоставленный код выхода в ОС. Оператор return
вместо этого закрывает текущую функцию, предоставляя вызывающему пользователю указанный результат.
Они одинаковы только при использовании в main
(поскольку выход из функции main
завершает программу).
Обычно exit
используется только в экстренных случаях, когда вы хотите завершить программу, потому что нет разумного способа продолжить выполнение. Например:
//
// Ensure allocation of `size` bytes (will never return
// a NULL pointer to the caller).
//
// Too good to be true? Here the catch: in case of memory
// exhaustion the function will not return **at all** :-)
//
void *safe_malloc(int size) {
void *p = malloc(size);
if (!p) {
fprintf(stderr, "Out of memory: quitting\n");
exit(1);
}
return p;
}
В этом случае, если функция a
вызывает функцию b
, которая вызывает функцию c
, которая вызывает my_malloc
, вы можете отказаться от программы на месте вместо возврата к c
кода ошибки (например, NULL
), если код не написан для обработки отказов выделения.
Ответ 3
Да, есть, поскольку нет выражения, называемого exit
. Я предполагаю, что вы имеете в виду функцию exit
?
В этом случае существует большая разница: функция exit
завершает процесс, другими словами, программа завершается. Оператор return
просто возвращает из текущей функции.
Они похожи только при использовании в main
.
Ответ 4
-
return
- это оператор, возвращающий управление обратно вызывающему функция. -
exit
- системный вызов, который завершает текущий процесс, т.е. в настоящее время выполняется программа.
В main()
выполняются те же return 0;
и exit(0);
.
ПРИМЕЧАНИЕ: вы должны включить #include<stdlib.h>
.