exit, _exit, _Exit - C++ Builder

C++ Builder 参考手册<cstdlib>exit, _exit, _Exit


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

void exit(int status);
void _exit(int status);
void _Exit(int status);

参数:

status:给操作系统或父进程的返回值:
0:正常结束,非0:异常结束。

返回值:

无。

要注意 _Exit 和 _exit 首字母大小写不同,它们是不同的函数,这几个函数的具体区别如下:

  • exit 是标准 C/C++ 函数,结束进程,并且调用 atexit 添加的函数,调用全局变量的析构函数,但是不会调用当前函数的局部变量的析构函数,不会弹出错误信息 (无论参数的值是多少);
  • _exit 不是标准 C/C++ 函数,但是很多编程开发工具,例如 C++ Builder 或 Visual C++ 里面都有这个函数,MSDN 里面也有说明,是和 exit 相同的函数;
  • _Exit 是 C++ 11 函数,结束进程,不会调用任何的析构函数,如同 abort 但是不会弹出错误信息。

这些函数的 status 参数可以是 (不限于) 以下表格的常数:

常数 说明
EXIT_SUCCESS 0 程序正常结束
EXIT_FAILURE 1 程序异常结束

以下表格为程序测试结果:

退出时执行的函数 执行 std::abort 执行 std::exit
使用 std::atexit 添加的函数 [ ] [√]
使用 Sysutils::AddExitProc 添加的函数 [ ] [√]
使用 Sysutils::AddTerminateProc 添加的函数 [ ] [ ]
使用 #pragma exit 添加的函数 [ ] [√]
当前函数局部变量的析构函数 [ ] [ ]
主窗口析构函数 [ ] [√]
全局变量析构函数 [ ] [√]

例子:

void _USERENTRY Func1(void)
{
    ShowMessage(L"正在执行函数 Func1");
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    std::atexit(Func1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::exit(EXIT_SUCCESS);
}

运行结果:

点击 Button1 按钮,弹出 std::atexit 添加的函数打开的提示信息对话框:“正在执行函数 Func1”,关闭这个对话框,程序退出。

运行结果

相关:


C++ Builder 参考手册<cstdlib>exit, _exit, _Exit