我读到这个和这个.如果通过包含fenv.h生成nan并且启用所有浮点异常,则可以抛出SIGFPE,但是FE_INEXACT通过feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);
因此,代码改变了形式
int main () {
double dirty = 0.0;
double nanvalue = 0.0/dirty;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
至
#include <fenv.h>
int main () {
feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT); // Enable all floating point exceptions but FE_INEXACT
double dirty = 0.0;
double nanvalue = 0.0/dirty;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但您必须更改代码.我有问题,在一个巨大的c和c ++代码库中,某个地方生成了一个nan,我不知道在哪里.将上述更改应用于文件的hunderts并跟踪错误不是一种选择.
有没有办法在没有代码更改的情况下启用所有浮点异常?有没有我不知道的编译选项?
我们使用intel icc 15.0.3版编译器.
无论您的代码跨越多少个文件,您只需在函数的第一行添加feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT) 一次main()。
它将启用整个程序的异常,直到您通过调用另一个函数(例如fedisableexcept().