天天看點

exit 與 return

說明

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的現象就很模糊,多數情況下現象都是一緻的。

程序終止的5種方法

  1. 正常終止

    (1)從main函數傳回

    (2)調用exit

    (3)調用_exit

  2. 異常終止

    (1)調用abort

    (2)由一個信号來終止

exit和

_exit

就是用來正常終止一個程序的,主要差別是

_exit

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

繼續閱讀