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

ora*_*ius 22 c++

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

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

int main()
{
    int a=3,b=0;
    int c=a%b;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Emi*_*l H 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;
Run Code Online (Sandbox Code Playgroud)


art*_*urh 9

看看这个页面.

您问题的相关部分:

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