好吧,我搜索了有关 SIGFPE 的文章,然后我写了一些测试,但它的行为很奇怪。然后我不得不把它贴在这里寻求帮助。GCC/G++ 或 ISO C++ 是否明确定义了如果除以零会发生什么?
1)我搜索了文章: 除以零不会抛出 SIGFPE 它与输出相同的是 inf
2)如果我将其重写如下:
void signal_handler (int signo) {
if(signo == SIGFPE) {
std::cout << "Caught FPE\n";
}
}
int main (void) {
signal(SIGFPE,(*signal_handler));
int b = 1;
int c = 0;
int d = b/c;
//fprintf(stderr,"d number is %d\n,d);
return 0;
}
然后 signal_handler 不会发生。但是如果我取消注释该行
//fprintf(stderr,"d number is %d\n,d);
然后 signal_handler 继续调用。
有人可以解释一下吗?