今天我在一些我刚写的代码中追踪了一个浮点异常。需要一段时间才能找到,因为它实际上是由整数模零点引起的。显然做任何mod零的事情都不会被定义,但我认为错误是如此误导是很奇怪的。在C ++模运算符中,它将使用两个整数的浮点数是什么? (我正在使用gcc 4.3.2)
这是一个演示错误的简单程序。
int main()
{
int a=3,b=0;
int c=a%b;
return 0;
}
答案 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)