說明
exit(0)正常運作程式并退出程式;exit(1)非正常運作導緻退出程式;return()傳回函數,若在主函數中,則會退出函數并傳回一值。
- return傳回函數值,是關鍵字,exit 是一個函數。
- return是語言級别的,它表示了調用堆棧的傳回,而exit是系統調用級别的,它表示了一個程序的結束。
- return是函數的退出(傳回),exit是程序的退出。
- return是C語言提供的,exit是作業系統提供的(或者函數庫中給出的)。
- return用于結束一個函數的執行,将函數的執行資訊傳出個其他調用函數使用。exit函數是退出應用程式,删除程序使用的記憶體空間,并将應用程式的一個狀态傳回給OS,這個狀态辨別了應用程式的一些運作資訊,這個資訊和機器和作業系統有關,一般是 0 為正常退出,非0 為非正常退出。
- 非主函數中調用return和exit效果很明顯,但是在main函數中調用return和exit的現象就很模糊,多數情況下現象都是一緻的。
程序終止的5種方法
-
正常終止
(1)從main函數傳回
(2)調用exit
(3)調用_exit
-
異常終止
(1)調用abort
(2)由一個信号來終止
exit和就是用來正常終止一個程序的,主要差別是
_exit
會立刻進入核心,而exit先執行一些清除工作(包括執行各種終止處理程式,關閉所有标準I/O等,一旦關閉了IO,例如printf等函數就不會輸出任何東西了),然後才進入核心。這兩個函數會對父子程序有一定的影響,當用vfork建立子程序時,子程序會先在父程序的位址空間運作(這跟fork不一樣),如果子程序調用了exit就會把父程序的IO給關掉。
_exit