麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

exit和atexit的區別詳細解析

2020-01-26 15:53:16
字體:
來源:轉載
供稿:網友

一、exit()函數
函數聲明:
void exit(int state);
exit()函數用于在程序運行的過程中隨時結束程序,exit的參數state是返回給操作系統,返回0表示程序正常結束,非0表示程序非正常結束。main函數結束時也會隱式地調用exit函數。exit函數運行時首先會執行由atexit()函數登記的函數,然后會做一些自身的清理工作,同時刷新所有輸出流、關閉所有打開的流并且關閉通過標準I/O函數tmpfile()創建的臨時文件。

二、atexit()函數
函數聲明:
int atexit(void (*func)(void)); 
很多時候我們需要在程序退出的時候做一些諸如釋放資源的操作,但程序退出的方式有很多種,比如main()函數運行結束、在程序的某個地方用exit()結束程序、用戶通過Ctrl+C或Ctrl+break操作來終止程序等等,因此需要有一種與程序退出方式無關的方法來進行程序退出時的必要處理。方法就是用atexit()函數來注冊程序正常終止時要被調用的函數。

atexit()函數的參數是一個函數指針,函數指針指向一個沒有參數也沒有返回值的函數。atexit()的函數原型是:int atexit (void (*)(void));

在一個程序中最多可以用atexit()注冊32個處理函數,這些處理函數的調用順序與其注冊的順序相反,也即最先注冊的最后調用,最后注冊的最先調用。

下面是一段代碼示例:

復制代碼 代碼如下:

#include <stdlib.h> // 使用atexit()函數所必須包含的頭文件stdlib.h
#include <iostream.h>

void terminateTest()
{
    cout<<"程序正在結束..."<<endl;
}

int main(void)
{
    // 注冊退出處理函數
    atexit(terminateTest);

    cout<<"the end of main()"<<endl;

    return 0;
}


程序的運行結果為:
the end of main()
程序正在結束...

這些函數都是在main結束以后才被調用的。atexit只是注冊他們,使得他們在main結束以后被調用,看名字就可以看出來。

atexit這個玩意超有用,可以按照你予設的順序摧毀全局變量(類),例如有個log類,你在其它的全局類里也有可能調用到Log類寫日志。所以log類必須最后被析構。假如沒有規定析構順序,那么程序在退出時將有可能首先析構log類,那么其它的全局類在此時將無法正確寫日志。
把數據寫回文件, 刪除臨時文件, 這才是真正有用的.

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

圖片精選

主站蜘蛛池模板: 国产色爱综合网 | 一区二区久久精品66国产精品 | 国产69精品久久久久9999不卡免费 | 天天夜干| 午夜视频亚洲 | 日韩毛片一区二区三区 | 羞羞色在线观看 | 久久精品九九 | 久久精品.com | 在线观看国产免费视频 | 国产精品久久久久影院老司 | 永久久久 | 最新在线黄色网址 | av91肉丝一区二区电影 | 青青操国产 | 亚洲va久久久噜噜噜久牛牛影视 | 性aaa | 久久超碰99 | 精品人伦一区二区三区蜜桃网站 | 色淫影院| 国产羞羞视频在线观看 | 色播av在线 | 国产亚洲高清在线精品不卡 | 黄色av免费电影 | 欧美精品黄色 | 黄wwww| 欧美成人精品一区 | 日韩视频一区二区三区在线观看 | 午夜伊人 | 黄色大片网站在线观看 | 欧美淫交| 中国杭州少妇xxxx做受 | 99麻豆久久久国产精品免费 | 欧美性猛交xxx乱大交3蜜桃 | 7m视频成人精品分类 | 国产91在线播放九色 | 国产亚洲高清在线精品不卡 | 夜夜夜精品视频 | 国产精品久久久久久久hd | 韩国十九禁高潮床戏在线观看 | 毛片免费观看完整版 |