exit與return的區別

來源:互聯網
上載者:User

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

  int main(){

  Packet_Func();

  //if error occures,will the following code continue running?

  ...code...

  }

  int Packet_Fun(){

  if(error occured)

  handle_error();

  }

  int handle_error(){

  //handle error

  exit(-1);

  }

  實驗的結果相信大家都知道了,就是一旦handle_error返回,整個程式是會結束的,那麼為什麼呢?我查了一下,真是慚愧。。。。

  exit用於在程式啟動並執行過程中隨時結束程式,exit的參數是返回給OS的。main函數結束時也會隱式地調用exit函數。exit函數運行時首先會執行由atexit()函數登記的函數,然後會做一些自身的清理工作,同時重新整理所有輸出資料流、關閉所有開啟的流並且關閉通過標準I/O函數tmpfile()建立的臨時檔案。exit是結束一個進程,它將刪除進程使用的記憶體空間,同時把錯誤資訊返回父進程,而return是返回函數值並退出函數

  2,return是語言層級的,它表示了呼叫堆疊的返回;而exit是系統調用層級的,它表示了一個進程的結束。

  3,exit函數是退出應用程式,並將應用程式的一個狀態返回給OS,這個狀態標識了應用程式的一些運行資訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.