C語言中return和exit的區別

來源:互聯網
上載者:User

1,exit用於在程式啟動並執行過程中隨時結束程式,exit的參數是返回給OS的。main函數結束時也會隱式地調用exit函數。exit函數運行時首先會執行由atexit()函數登記的函數,然後會做一些自身的清理工作,同時重新整理所有輸出資料流、關閉所有開啟的流並且關閉通過標準I/O函數tmpfile()建立的臨時檔案。exit是結束一個進程,它將刪除進程使用的記憶體空間,同時把錯誤資訊返回父進程,而return是返回函數值並退出函數
2,return是語言層級的,它表示了呼叫堆疊的返回;而exit是系統調用層級的,它表示了一個進程的結束。
3,exit函數是退出應用程式,並將應用程式的一個狀態返回給OS,這個狀態標識了應用程式的一些運行資訊。
4,和機器和作業系統有關一般是 0 為正常退出 非0 為非正常退出
5,void exit(int status);
6,atexit()函數的參數是一個函數指標,函數指標指向一個沒有參數也沒有傳回值的函數。atexit()的函數原型是:int atexit (void (*)(void));在一個程式中最多可以用atexit()註冊32個處理函數,這些處理函數的調用順序與其註冊的順序相反,也即最先註冊的最後調用,最後註冊的最先調用。

一般程式執行到 main() 的結束就完成了, 如果想在程式結束時做一些事情, 可以嘗試著用這個函數.

 

void f1(void)  
{
printf("exit f1/n");
}

void f2(void)
{
printf("exit f2/n");
}

int main()
{
atexit(f1);
atexit(f2);
printf("exit main/n");
return 0;
}

return是返回調用函數,exit是退出進程,
你可以
man 3 exit
return是從A城市中的x小區到y小區,  
Exit—走出A城

 

在main函數裡面return(0)和exit(0)是一樣的,子函數用return返回;而子進程用exit退出,調用exit時要調用一段終止處理常式,然後關閉所有I/O流。

exit本身不是系統調用,而是一個C標準庫的函數而已,在stdlib裡面,系統調用是exit內部實現去完成的。

 

在main函數中我們通常使用return (0);這樣的方式返回一個值。

但這是限定在非void情況下的也就是void main()這樣的形式。

exit()通常是用在子程式中用來終結程式用的,使用後程式自動結束跳會作業系統。

但在如果把exit用在main內的時候無論main是否定義成void返回的值都是有效,並且exit不需要考慮類型,exit(1)等價於return (1)

MS的msdn中關於atexit的help如下:

Processes the specified function at exit.

int atexit(void (__cdecl *func )( void )  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.