如何禁用CRT异常?

时间:2019-11-21 08:32:36

标签: exception visual-c++ g++ crt

我不在任何库或应用程序中使用异常处理。一切都在异常处理关闭的情况下构建,并且使用MS Visual Studio的Windows应用程序与nothrownew.obj链接在一起。该代码自行处理所有故障。 CRT在我后面抛出异常并终止程序而不返回错误结果,这是一个问题。

例如,当提供的驱动器号不再存在而不仅仅是返回errcode时,这崩溃了。

if (_tgetdcwd(driveltr ? DriveLtrToDOSDriveNum(driveltr) : 0, dirout, diroutbufsize)==NULL) {
    errcode=GetErrorFromErrno();
}

现在在Windows上,我已经使用_set_invalid_parameter_handler()来防止上述令人讨厌的问题。像这样:

void invalid_parameter_function(const wchar_t * expression, const wchar_t * function, const wchar_t * file, unsigned int line, uintptr_t pReserved)
{

}

int _tmain(int argc, const TCHAR *argv[])
{
  _set_invalid_parameter_handler(invalid_parameter_function);
}

是否有办法确保CRT不会为MS Visual Studio 2017和与g ++一起使用的CRT引发异常?如果没有,并且必须像上面在Windows上一样设置一个处理程序,那么g ++是否有一个处理程序?

TIA !!

0 个答案:

没有答案