当b为零时,为什么%b会产生SIGFPE?

时间:2009-07-04 01:00:16

标签: c++

今天我在一些我刚写的代码中追踪了一个浮点异常。需要一段时间才能找到,因为它实际上是由整数模零点引起的。显然做任何mod零的事情都不会被定义,但我认为错误是如此误导是很奇怪的。在C ++模运算符中,它将使用两个整数的浮点数是什么? (我正在使用gcc 4.3.2)

这是一个演示错误的简单程序。

int main()
{
    int a=3,b=0;
    int c=a%b;
    return 0;
}

2 个答案:

答案 0 :(得分:33)

操作触发SIGFPE

  

SIG是信号的通用前缀   名称; FPE是首字母缩略词   浮点异常。虽然   SIGFPE不一定涉及   浮点运算,没有   没有改变名称的方法   打破向后兼容性。

GDB对此更加清楚,并将其称为“算术异常”:

(gdb) run
Starting program: /home/emil/float

Program received signal SIGFPE, Arithmetic exception.
0x0804837d in main () at float.c:4
4           int c=a%b;

答案 1 :(得分:9)

看看this page

您问题的相关部分:

  

SIG是信号名称的通用前缀; FPE是浮点异常的首字母缩写。虽然SIGFPE不一定涉及浮点运算,但是如果不破坏向后兼容性,就无法更改其名称。