当 b 为零时,为啥 a%b 会产生 SIGFPE?
Posted
技术标签:
【中文标题】当 b 为零时,为啥 a%b 会产生 SIGFPE?【英文标题】:Why does a%b produce SIGFPE when b is zero?当 b 为零时,为什么 a%b 会产生 SIGFPE? 【发布时间】:2009-07-04 01:00:16 【问题描述】:今天我正在跟踪我刚刚编写的一些代码中的浮点异常。花了一点时间才找到,因为它实际上是由取整数模零引起的。显然,不会定义任何 mod 零,但我认为错误如此具有误导性,这很奇怪。在 C++ 模运算符中,它将对两个整数使用浮点数是什么? (我使用的是 gcc 4.3.2)
这是一个演示错误的简单程序。
int main()
int a=3,b=0;
int c=a%b;
return 0;
【问题讨论】:
【参考方案1】:操作触发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;
【讨论】:
【参考方案2】:看看this page。
您问题的相关部分:
SIG 是信号名称的常用前缀; FPE 是浮点异常的缩写。虽然 SIGFPE 不一定涉及浮点运算,但在不破坏向后兼容性的情况下无法更改其名称。
【讨论】:
以上是关于当 b 为零时,为啥 a%b 会产生 SIGFPE?的主要内容,如果未能解决你的问题,请参考以下文章