C++ Builder 参考手册 ➙ System::Sysutils ➙ Abort
头文件:#include <System.SysUtils.hpp>
命名空间:System::Sysutils
函数原型:
void __fastcall Abort(void);
参数:
无。
返回值:
无。
- Abort 函数抛出一个 “安静的” 异常 EAbort,即在某些事件里面,抛出一个这样的异常会结束这个事件,但是不会提示错误信息,如果抛出其他异常就会提示错误信息;
- 无论如何,Abort 是抛出了异常,也就是说,如果写在了 try ... catch 里面,是可以捕获到异常的,即 EAbort,和其他异常并没什么区别;
- <cstdlib> 里面有一个相似的函数 abort,所有字母全部小写,是标准 C/C++ 函数,在 std 命名空间里面,这个 std::abort 让程序异常结束,并且通知操作系统程序是由于有错误而结束的,会有程序异常结束的提示信息;
- 为了减少出错概率,方便阅读程序,调用函数可以带命名空间书写,例如 Sysutils::Abort(); 和 std::abort();
例1:在 Button1 按钮的点击事件里面,测试 “安静的” 异常
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = StrToIntDef(Edit1->Text, 0);
if(n < 0)
Sysutils::Abort();
if(n > 0)
throw Exception(L"测试抛出异常");
ShowMessage(L"程序正常执行");
}
运行结果:
- 在 Edit1 里面输入 -1,然后点击 Button1,没有任何提示;
- 在 Edit1 里面输入 0,然后点击 Button1,提示 “程序正常执行”;
- 在 Edit1 里面输入 1,然后点击 Button1,提示 “测试抛出异常”:
例2:在 try ... catch 里面测试 Abort 函数抛出的异常
这个例子是把前面的 例1 的程序代码放在了 try ... catch 里面,测试 Abort 是否抛出了异常:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
try
{
int n = StrToIntDef(Edit1->Text, 0);
if(n < 0)
Sysutils::Abort();
if(n > 0)
throw Exception(L"测试抛出异常");
ShowMessage(L"程序正常执行");
}
catch(Exception &e)
{
ShowMessage(L"捕获到了异常:" + e.ClassName()
+ L"\r\n异常提示信息:" + e.Message);
}
}
运行结果:
在 Edit1 里面输入 -1,然后点击 Button1 按钮,可以看到程序抛出了异常,而等于 0 和 1 的情况和前面的 例1 相同:
在 Edit1 里面输入 -1,点击 Button1 按钮可以看到程序抛出了异常 在 Edit1 里面输入 0,点击 Button1 提示 “程序正常执行” 在 Edit1 里面输入 1,点击 Button1 提示 “测试抛出异常”相关:
- std::abort
- std::exit
- System::Sysutils::EAbort
- System::Sysutils::OutOfMemoryError
- System::Sysutils::RaiseLastOSError
- System::Sysutils::CheckOSError
- System::Sysutils::Win32Check
- System::Sysutils::ShowException
- Vcl::Forms::TApplication::ShowException
- System::Sysutils::ExceptionErrorMessage
- System::Sysutils
- <cstdlib>
C++ Builder 参考手册 ➙ System::Sysutils ➙ Abort
网友评论