天天看點

exit(0)與exit(1)、return差別 exit和_exit

exit(0):正常運作程式并退出程式;

exit(1):非正常運作導緻退出程式;

return():傳回函數,若在主函數中,則會退出函數并傳回一值。

詳細說:

  1. return傳回函數值,是關鍵字;  exit 是一個函數。

  2. return是語言級别的,它表示了調用堆棧的傳回;而exit是系統調用級别的,它表示了一個程序的結束。

  3. return是函數的退出(傳回);exit是程序的退出。

  4. return是C語言提供的,exit是作業系統提供的(或者函數庫中給出的)。

  5. return用于結束一個函數的執行,将函數的執行資訊傳出個其他調用函數使用;exit函數是退出應用程式,删除程序使用的記憶體空間,并将應用程式的一個狀态傳回給OS,這個狀态辨別了應用程式的一些運作資訊,這個資訊和機器和作業系統有關,一般是 0 為正常退出,非0 為非正常退出。

  6. 非主函數中調用return和exit效果很明顯,但是在main函數中調用return和exit的現象就很模糊,多數情況下現象都是一緻的。

exit和_exit

程序終止有5種方法:

1正常終止

(1)從main函數傳回

(2)調用exit

(3)調用_exit

2異常終止

(1)調用abort

(2)由一個信号來終止 

exit和_exit就是用來正常終止一個程序的,主要差別是_exit會立刻進入核心,而exit先執行一些清除工作(包括執行各種終止處理程式,關閉所有标準I/O等,一旦關閉了IO,例如Printf等函數就不會輸出任何東西了),然後才進入核心。這兩個函數會對父子程序有一定的影響,當用vfork建立子程序時,子程序會先在父程序的位址空間運作(這跟fork不一樣),如果子程序調用了exit就會把父程序的IO給關掉。

這兩個函數都帶一個參數表示終止狀态,這跟我們平時寫的return效果是一樣的,如果不傳回一個終止狀态,那表示這個程序的終止狀态就是未定義的。

轉自:http://blog.163.com/[email protected]/blog/static/1298902402010731114834911/