1. 程式人生 > >exit() 與 return() 的區別

exit() 與 return() 的區別

包括 處理 應用程序 調用 空間 堆棧 的區別 此外 內存空間

exit()與 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()和 return()的用法如下:

exit(0):表示正常運行程序並退出程序;

exit(1):表示非正常運行導致退出程序;

return(func()):返回函數 func() 的值,若在主函數中,則會退出函數並返回一值。

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

進程終止有5種方法:

1正常終止

(1)從main函數返回

(2)調用exit

(3)調用_exit

2異常終止

(1)調用abort

(2)由一個信號來終止

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

exit() 與 return() 的區別