c++ - 为什么当 b 为零时 a%b 产生 SIGFPE?

标签 c++

今天我在我刚刚编写的一些代码中追踪一个浮点异常。找了一会才发现,因为其实是取整数模零导致的。显然做任何模零都不会被定义,但我认为错误如此具有误导性是很奇怪的。 C++ 模运算符中将 float 用于两个整数的是什么? (我使用的是 gcc 4.3.2)

下面是一个演示错误的简单程序。

int main()
{
    int a=3,b=0;
    int c=a%b;
    return 0;
}

最佳答案

操作触发SIGFPE :

SIG is a common prefix for signal names; FPE is an acronym for floating-point exception. Although SIGFPE does not necessarily involve floating-point arithmetic, there is no way to change its name without breaking backward compatibility.

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;

关于c++ - 为什么当 b 为零时 a%b 产生 SIGFPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25631840/

相关文章:

android - 指示 gnu make 仅使用静态库

c++ - 具有可变数量索引的 OpenGL glDrawElements

c++ - 优化openmp的依赖循环

C++将参数包扩展为数组元组

c++ - 在 C++ 中获取环境变量 - 我得到 NULL

c++ - 将 C++ 方法作为函数指针传递?

c++ - 转换为模板

c++ - 替换对象 vector 的元素

c++ - 如何从包含字符和整数的行中解析出整数

c++ - 0x742808F2 处未处理的异常:Microsoft C++ 异常:内存位置 0x0055E9E4 处的 std::out_of_range