exit和atexit的差別具體解析。本站提示廣大學習愛好者:(exit和atexit的差別具體解析)文章只能為提供參考,不一定能成為您想要的結果。以下是exit和atexit的差別具體解析正文
1、exit()函數
函數聲明:void exit(int state);
exit()函數用於在法式運轉的進程中隨時停止法式,exit的參數state是前往給操作體系,前往0表現法式正常停止,非0表現法式非正常停止。main函數停止時也會隱式地挪用exit函數。exit函數運轉時起首會履行由atexit()函數掛號的函數,然後會做一些本身的清算任務,同時刷新一切輸入流、封閉一切翻開的流而且封閉經由過程尺度I/O函數tmpfile()創立的暫時文件。
2、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類,那末其它的全局類在此時將沒法准確寫日記。
把數據寫回文件, 刪除暫時文件, 這才是真正有效的.