【发布时间】:2011-05-08 01:19:03
【问题描述】:
gcc 生成浮动代码,为以下代码引发 SIGFPE:
#include <limits.h>
int x = -1;
int main()
{
return INT_MIN % x;
}
但是,我在标准中找不到任何声明该代码调用未定义或实现定义的行为。据我所知,它需要返回 0。这是 gcc 中的错误还是我错过了标准产生的一些特殊异常?
【问题讨论】:
-
注意全局变量是为了防止gcc优化计算。
-
你期望得到一个负数的模的结果是什么?
-
“当 a 或 n 为负时,这种幼稚的定义就会失效,编程语言在定义这些值的方式上也会有所不同”。 en.wikipedia.org/wiki/Modulo_operation
-
我希望
INT_MIN的余数除以-1,在这种情况下,无论您将余数定义为正数还是负数,它都为零,因为-1可以除以任何东西均匀。 -
C 在这种情况下定义了它们,并且在任何情况下,当分母为 1 或 -1 时,定义没有歧义,因为余数本质上为零。
标签: c gcc overflow division modulo