Tag: 为零除

除以零:未定义的行为或实现在C和/或C ++中定义?

关于除零,标准说: C99 6.5.5p5 – /运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数。 在这两个操作中,如果第二个操作数的值为零,则行为未定义。 C ++ 03 5.6.4 – 二进制/运算符产生商,而二进制%运算符产生第一个表达式除以第二个表达式的余数。 如果/或%的第二个操作数为零,则行为未定义。 如果我们将上述段落视为面值,则答案显然是两种语言的未定义行为 。 但是,如果我们进一步了解C99标准,我们会看到以下段落似乎是矛盾的(1): C99 7.12p4 – 宏INFINITY扩展为float类型的常量表达式,表示正无穷大或无符号无穷大(如果可用); 标准是否有某种黄金法则 ,其中未定义的行为不能被(可能)矛盾的陈述所取代? 除此之外,我认为如果你的实现定义了INFINITY宏,那么除以零被定义为这样是不合理的。 但是,如果您的实现没有定义这样的宏,则行为是Undefined。 我很好奇这两种语言对于这个问题的共识是什么(如果有的话)。 如果我们谈论整数除法int i = 1 / 0 1/0与浮点除法float i = 1.0 / 0.0 ,答案是否会改变? 注意(1) C ++ 03标准讨论了包含INFINITY宏的库。