2013-06-29 110 views
12

在函數中使用時,return 0exit (0)之間是否有區別? 如果是的話,我應該在什麼時候使用return 0exit (0)「return 0」和「exit(0)」之間的區別

+1

exit 0?可能不會編譯。退出(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'處理程序在從main返回時也會被調用。 –

+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

*「即使您不寫回歸0,一些編譯器甚至會接受並編譯代碼」,因爲它是標準的。 – effeffe

+0

行了,謝謝! – 0decimal0

相關問題