exit和atexit的區(qū)別詳細解析
一、exit()函數(shù)
函數(shù)聲明:void exit(int state);
exit()函數(shù)用于在程序運行的過程中隨時結(jié)束程序,exit的參數(shù)state是返回給操作系統(tǒng),返回0表示程序正常結(jié)束,非0表示程序非正常結(jié)束。main函數(shù)結(jié)束時也會隱式地調(diào)用exit函數(shù)。exit函數(shù)運行時首先會執(zhí)行由atexit()函數(shù)登記的函數(shù),然后會做一些自身的清理工作,同時刷新所有輸出流、關(guān)閉所有打開的流并且關(guān)閉通過標準I/O函數(shù)tmpfile()創(chuàng)建的臨時文件。
二、atexit()函數(shù)
函數(shù)聲明:int atexit(void (*func)(void));
很多時候我們需要在程序退出的時候做一些諸如釋放資源的操作,但程序退出的方式有很多種,比如main()函數(shù)運行結(jié)束、在程序的某個地方用exit()結(jié)束程序、用戶通過Ctrl+C或Ctrl+break操作來終止程序等等,因此需要有一種與程序退出方式無關(guān)的方法來進行程序退出時的必要處理。方法就是用atexit()函數(shù)來注冊程序正常終止時要被調(diào)用的函數(shù)。
atexit()函數(shù)的參數(shù)是一個函數(shù)指針,函數(shù)指針指向一個沒有參數(shù)也沒有返回值的函數(shù)。atexit()的函數(shù)原型是:int atexit (void (*)(void));
在一個程序中最多可以用atexit()注冊32個處理函數(shù),這些處理函數(shù)的調(diào)用順序與其注冊的順序相反,也即最先注冊的最后調(diào)用,最后注冊的最先調(diào)用。
下面是一段代碼示例:
#include <stdlib.h> // 使用atexit()函數(shù)所必須包含的頭文件stdlib.h
#include <iostream.h>
void terminateTest()
{
cout<<"程序正在結(jié)束..."<<endl;
}
int main(void)
{
// 注冊退出處理函數(shù)
atexit(terminateTest);
cout<<"the end of main()"<<endl;
return 0;
}
程序的運行結(jié)果為:
the end of main()
程序正在結(jié)束...
這些函數(shù)都是在main結(jié)束以后才被調(diào)用的。atexit只是注冊他們,使得他們在main結(jié)束以后被調(diào)用,看名字就可以看出來。
atexit這個玩意超有用,可以按照你予設(shè)的順序摧毀全局變量(類),例如有個log類,你在其它的全局類里也有可能調(diào)用到Log類寫日志。所以log類必須最后被析構(gòu)。假如沒有規(guī)定析構(gòu)順序,那么程序在退出時將有可能首先析構(gòu)log類,那么其它的全局類在此時將無法正確寫日志。
把數(shù)據(jù)寫回文件, 刪除臨時文件, 這才是真正有用的.
您可能感興趣的文章
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10用C實現(xiàn)添加和讀取配置文件函數(shù)
- 01-10深入串的模式匹配算法(普通算法和KMP算法)的詳解
- 01-10如何求連續(xù)幾個數(shù)之和的最大值
- 01-10如何在二叉樹中找出和為某一值的所有路徑
- 01-10用代碼和UML圖化解設(shè)計模式之橋接模式的深入分析
- 01-10C語言中字符串和數(shù)字的相互轉(zhuǎn)換實現(xiàn)代碼
- 01-10淺析C語言中printf(),sprintf(),scanf(),sscanf()的用法和區(qū)別
- 01-10深入解析int(*p)[]和int(**p)[]
- 01-10淺析C語言頭文件和庫的一些問題


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文