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

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

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

int main()
{
    int a=3,b=0;
    int c=a%b;
    return 0;
}
最佳答案
该操作触发SIGFPE

SIG is a common prefix for signal
names; FPE is an acronym for
floating-point exception. Although
SIGFPE does not necessarily involve
floating-point arithmetic, there is no
way to change its name without
breaking backward compatibility.

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;

转载注明原文:c++ 当b为零时,为什么%b会产生SIGFPE? - 代码日志