国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

詳細(xì)解析exit和atexit的區(qū)別

2020-02-24 14:28:19
字體:
供稿:網(wǎng)友

在程序中,最多可以向ATEXIT注冊32個處理函數(shù),這些處理函數(shù)的調(diào)用順序與注冊順序相反,下文是武林技術(shù)頻道小編為大家介紹的詳細(xì)解析exit和atexit的區(qū)別,希望對你學(xué)習(xí)這方面知識有所幫助!

一、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)閉通過標(biāo)準(zhǔ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)的方法來進(jì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ù)寫回文件, 刪除臨時文件, 這才是真正有用的.

上面就是武林技術(shù)頻道小編給大家介紹的詳細(xì)解析exit和atexit的區(qū)別,這些知識都是非常值得我們?nèi)W(xué)習(xí)的,希望這篇文章能夠幫助到你們。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 溧阳市| 三亚市| 平罗县| 乐至县| 奉节县| 浑源县| 广东省| 莱阳市| 清远市| 和顺县| 江华| 廊坊市| 阿鲁科尔沁旗| 叶城县| 平江县| 莎车县| 农安县| 平远县| 若尔盖县| 邛崃市| 句容市| 合水县| 霍州市| 台中县| 佛冈县| 黄石市| 绥芬河市| 岳阳县| 武陟县| 苏尼特左旗| 清涧县| 获嘉县| 南江县| 顺平县| 安国市| 新龙县| 秀山| 改则县| 六枝特区| 无极县| 长兴县|