我想在 Windows 上处理 fpu 异常,例如:
#include <math.h>
#include <fenv.h>
#include <stdio.h>
int main()
{
double b = 0;
int raised;
feclearexcept (FE_ALL_EXCEPT);
b /= 0;
raised = fetestexcept (FE_OVERFLOW | FE_INVALID);
if (raised & FE_OVERFLOW) { printf("over\n");}
if (raised & FE_INVALID) { printf("invalid\n");}
return 0;
}
但是在窗户上。我尝试阅读 MSDN,但文件根本不清楚。我想在 x86 和 amd64 架构上使用 Visual Studio 编译器来做到这一点。
我对在 C++ 中翻译异常不感兴趣——实际上,我什至对 FPU 异常都不感兴趣,只对经过一些计算后知道 FPU 状态感兴趣,就像上面的例子一样。
== 编辑 ==
好的,看起来它实际上要简单得多:使用 _clearfp 就足够了:
#include <math.h>
#include <float.h>
#include <stdio.h>
int main()
{
double b = 0;
int raised;
raised = _clearfp();
b /= 0;
raised = _clearfp();
if (raised & SW_INVALID) { printf("invalid\n");}
return 0;
}
比处理异常、SEH 和其他不可移植的东西要好得多:)