Я хотел бы обработать исключение fpu в Windows, что-то вроде:
#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, но документ не совсем ясно. Я хочу сделать это с компиляторами Visual Studio, как для x86, так и для amd64.
Я не заинтересован в переводе исключения в C ++ - на самом деле, я даже не заинтересован в исключении FPU, только в знании состояния FPU после некоторого вычисления, как в примере выше.
== edit ==
Хорошо, похоже, на самом деле все гораздо проще: достаточно использования _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 и другими непереносимыми вещами:)