【发布时间】:2013-02-01 02:12:18
【问题描述】:
好吧,我已经搜索了有关 SIGFPE 的文章,然后我写了一些测试,但它的行为很奇怪。然后我不得不把它贴在这里寻求帮助。 GCC/G++ 或 ISO C++ 是否明确定义了除以零会发生什么?
1) 我搜索了这篇文章: Division by zero does not throw 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 继续调用。
谁能解释一下?
【问题讨论】:
-
整数除以零仍然会引发
SIGFPE(浮点错误),但浮点除以零会产生无穷大作为答案。 -
int c = 0; int d = b/c;?这意味着b/0? -
我并没有完全复制你:我只收到一次信号,然后程序退出,有或没有
printf。如果我在信号处理程序中添加signal(SIGFPE,(*signal_handler));,那么我会重现你。 Linux 3.10,gcc 4.7.3。