今天我在我刚写的一些代码中追踪浮点异常.它需要一段时间才能找到,因为它实际上是由整数模零点引起的.显然做任何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)