Разница между "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>.