atexit - C++ Builder

C++ Builder 参考手册<cstdlib>atexit


头文件:#include <cstdlib>
命名空间:std
函数原型:

int atexit(void (_USERENTRY *func)(void));

参数:

func:要添加的在程序退出时运行的函数,这个参数是 atexit_t 类型的函数指针,即没有参数和返回值的,_USERENTRY 调用约定的函数。

返回值:

0:成功,非0:失败,添加的函数超过了 32 个。

  • 添加一个在程序退出时运行的函数,先添加的后执行,后添加的先执行;
  • 最多能添加 32 个这样的函数;
  • 程序正常退出时,执行的顺序:
    • std::atexit 添加的函数,先添加的后执行,后添加的先执行;
    • #pragma exit 添加的函数,按照优先级,或者 #pragma package(smart_init) 的控制;
    • 全局变量的析构函数。

例1:

void _USERENTRY Func1(void)
{
    ShowMessage(L"正在执行函数 Func1");
}

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    std::atexit(Func1);
}

运行结果:

运行结果:当程序退出时,弹出对话框:“正在执行函数 Func1”

例2:

#include <cstdlib>
#include <iostream>

using namespace std;

void _USERENTRY Func1(void)
{
    cout << "Func1" << endl;
}

void _USERENTRY Func2(void)
{
    cout << "Func2" << endl;
}

int main(void)
{
    atexit(Func1);
    atexit(Func2);
    cout << "Test std::atexit - Hsuanlu" << endl;
    return 0;
}

运行结果:

运行结果:程序退出时,先添加的后执行,后添加的先执行

相关:


C++ Builder 参考手册<cstdlib>atexit