詳解C語言中return與exit的區(qū)別
1,exit用于在程序運行的過程中隨時結(jié)束程序,exit的參數(shù)是返回給OS的。main函數(shù)結(jié)束時也會隱式地調(diào)用exit函數(shù)。exit函數(shù)運行時首先會執(zhí)行由atexit()函數(shù)登記的函數(shù),然后會做一些自身的清理工作,同時刷新所有輸出流、關(guān)閉所有打開的流并且關(guān)閉通過標(biāo)準(zhǔn)I/O函數(shù)tmpfile()創(chuàng)建的臨時文件。exit是結(jié)束一個進程,它將刪除進程使用的內(nèi)存空間,同時把錯誤信息返回父進程,而return是返回函數(shù)值并退出函數(shù)
2,return是語言級別的,它表示了調(diào)用堆棧的返回;而exit是系統(tǒng)調(diào)用級別的,它表示了一個進程的結(jié)束。
3,exit函數(shù)是退出應(yīng)用程序,并將應(yīng)用程序的一個狀態(tài)返回給OS,這個狀態(tài)標(biāo)識了應(yīng)用程序的一些運行信息。
4,和機器和操作系統(tǒng)有關(guān)一般是 0 為正常退出 非0 為非正常退出
5,void exit(int status);
6,atexit()函數(shù)的參數(shù)是一個函數(shù)指針,函數(shù)指針指向一個沒有參數(shù)也沒有返回值的函數(shù)。atexit()的函數(shù)原型是:int atexit (void (*)(void));在一個程序中最多可以用atexit()注冊32個處理函數(shù),這些處理函數(shù)的調(diào)用順序與其注冊的順序相反,也即最先注冊的最后
調(diào)用,最后注冊的最先調(diào)用。
一般程序執(zhí)行到 main() 的結(jié)束就完成了, 如果想在程序結(jié)束時做一些事情, 可以嘗試著用這個函數(shù).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
example: #include... #include... 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; } |
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/freeboy1015/article/details/7874079