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人士參考過後對你有幫助
謝謝!