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”,关闭这个对话框,程序退出。
运行结果相关:
- std::abort
- std::atexit
- System::Sysutils::Abort
- System::Sysutils::AddExitProc
- System::Sysutils::AddTerminateProc
- System::Sysutils
- <cstdlib>
C++ Builder 参考手册 ➙ <cstdlib> ➙ exit, _exit, _Exit
网友评论