2013-06-29 2 views
12

Есть ли разница в return 0 и exit (0) при использовании в функции? Если да, то когда я должен использовать return 0 или exit (0) в функции?Различия между «return 0» и «exit (0)»

+1

exit 0? вероятно, не компилируется. exit (0) завершает вашу программу.Вы, вероятно, не хотите этого – FDinoff

+0

Извините за это. Я отредактировал вопрос. – haccks

+0

Существует аналогичный пост здесь http://stackoverflow.com/questions/1116493/how-to-quit-a-c-program – doctorlove

ответ

17

return выходы из функции в то время как exit выходы из программы.

В main функции исполняющего return 0; заявления или вызывающий exit(0) функции будет вызывать зарегистрированные atexit обработчик и приведет к завершению работы программы.

+11

Обработчики 'atexit' вызываются при возврате из основного. –

+0

@CarlNorum спасибо за исправление, я обновил свой ответ. – ouah

6

Да, есть инструкция, которая называется exit. Я думаю, вы имеете в виду функцию exit?

В этом случае существует большое значение разница: функция exit завершает процесс, иными словами, программа завершается. Оператор return просто возвращается из текущей функции.

Они аналогичны только при использовании в функции main.

8

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's 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 указателя) если код не написан для обработки сбоев распределения.

0
  • return - инструкция, которая возвращает управление обратно на вызывающую функцию .
  • exit - это системный вызов, который завершает текущий процесс, т.е. исполняемую программу .

В main()return 0; и exit(0); выполняют ту же самую вещь.

ПРИМЕЧАНИЕ: вы должны включить #include<stdlib.h>.

+3

* «Некоторые компиляторы даже принимают и компилируют код, даже если u не пишет return 0" *, потому что он является стандартным. – effeffe

+0

ОК получил это спасибо! – 0decimal0