1. 程式人生 > >C語言中exit(0)與exit(1)有什麼區別

C語言中exit(0)與exit(1)有什麼區別

今天天氣有點冷,當我在寫訊息佇列的程式的時候,遇到了結束程序的這個問題,突然腦海裡有點混亂,我是用_exit(),還是用exit(1),還是用exit(0)呢,然後自己度娘了一下,整理了一下稍微做了一個總結吧。

_exit();和exit()主要區別是一個退出程序會清理I/O緩衝區,一個直接結束程序進入到核心中。

下面我就舉個例子說明下吧,

int mian()

{

printf("is ok\n");

printf("I am a chinese people");

_exit(0);

}

這個程式輸出的結果是:is ok

int mian()

{

printf("is ok\n");

printf("I am a chinese people");

exit(0);

}

這個程式輸出的結果是:is ok 

I am a chinese people

當時把第二個輸出資訊後面加一個"\n";兩個程式的結果都會輸出相同的結果,兩個列印資訊都會打印出來。

在這裡我總結了一下原因吧,可能只是一個小細節,以後大家遇到同樣的問題注意下就行了

原因如下:

printf函式就是使用的是緩衝I/O的方式,該函式在遇到“\n“換行符時自動的從緩衝區中將記錄讀出。所以exit()將緩衝區的資料寫完後才能退出來,所以呼叫exit()函式後程序並不會馬上退出,這就是有些出現的殭屍程式,而_exit是直接退出進入到核心中去。

  return是語言級別的,它表示了呼叫堆疊的返回;而exit是系統呼叫級別的,它表示了一個程序的結束。

  return是返回函式呼叫,如果返回的是main函式,則為退出程式   
  exit是在呼叫處強行退出程式,執行一次程式就結束   
  -------------------------------------------------------------------   
  return是返回 , 函式返回   
  而exit是退出   
  -------------------------------------------------------------------   
  exit(1)表示異常退出.這個1是返回給作業系統的不過在DOS好像不需要這個返回值   
  exit(0)表示正常退出   
  -------------------------------------------------------------------   
  無論寫在那裡,都是程式推出,dos和windows中沒有什麼不一樣,最多是系統處理的不一樣。   
  數字0,1,-1會被寫入環境變數ERRORLEVEL,其它程式可以由此判斷程式結束狀態。   
  一般0為正常推出,其它數字為異常,其對應的錯誤可以自己指定。   
  -------------------------------------------------------------------   
  返回給作業系統的,0是正常退出,其他值是異常退出,在退出前可以給出一些提示資訊,或在除錯程式中察看出錯原因.

這就是我在寫訊息佇列程式的時候遇到的一點混亂和疑惑的盲點,做了下個人的總結,希望有同樣盲點的IT人士參考過後對你有幫助

謝謝!