exit 與 return 的區別

2022-08-12 09:09:14 字數 1453 閱讀 4125

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給關掉。

程序終止有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的區別

一直沒有太留意這兩者的區別,但是在看unix網路程式設計的時候遇到問題了,我很疑惑,書中很多的系統呼叫都被作者替換成了包裹函式,而這些包裹函式最後都是呼叫了乙個統一的錯誤處理函式,結構如下,我很奇怪為什麼呼叫包裹函式之後程式會直接退出,按我理解應該用exec直接替換掉主調函式才能使其終結。這裡的癥結...

return與exit 的區別

return 返回函式值,是關鍵字 很明顯,exit 是乙個函式。return 語言提供的,是語言級別的,它表示了呼叫堆疊的返回,是函式的退出 返回 而exit 是作業系統提供的 或者函式庫中給出的 是系統呼叫級別的,它表示了乙個程序的結束。exit 退出程式 把控制權交給作業系統 return 結...

Exit 與return的區別

第一是在最初呼叫的時候的區別 按照ansi c,在最初呼叫的main 中使用return和exit 的效果相同。但要注意這裡所說的是 最初呼叫 如果main 在乙個遞迴程式中,exit 仍然會終止程式 但return控制權移交給遞迴的前一級,直到最初的那一級,此時return才會終止程式。另乙個是在...