gpt4 book ai didi

c++ - 为什么GCC执行1/0会报Floating Point Exception?

转载 作者:太空狗 更新时间:2023-10-29 23:37:10 24 4
gpt4 key购买 nike

Stroustrup 在“The Design and Evolution of C++”(Addison Wesley,1994 年)中说,“低级事件,例如算术溢出和被零除,假定由专用的低级机制处理,而不是而不是异常。这使 C++ 能够在算术方面与其他语言的行为相匹配。它还避免了在大量流水线架构上发生的问题,在这些架构中,诸如被零除之类的事件是异步的。”

问题 1:如果不是异常,为什么 GCC 会报告一个错误而不是较低级别的错误?

问题 2:既然我要除以整数,为什么报告为 float ?

鉴于我无法用 catch(...) 捕获它,这是非常具有误导性的。显然我可以测试并避免整个“错误”,但我的观点是,对于认为它可能是异常(合理)的初学者来说,这非常令人困惑,试图捕获它,然后发现它不是异常,并对报告的运行时异常感到疑惑。

我的编译器是 gcc 4.2.1 版(Apple Inc. build 5666)(第 3 点)

对 CPU 异常、FPU 异常、语言异常和操作系统异常之间的区别进行一些准确的澄清可能会解决这个问题。

示例程序:

int main(){
int i=1/0;
return i;
}

结果输出:

Floating point exception

最佳答案

浮点异常 (FPE) 不是 C++ 异常。各种系统中有几种类型的异常,它们是不可互换的。 FPE 是微处理器或 ISA 级别的异常,但不是 C++ 级别的异常。 FPE 可能会导致触发称为 SIGFPE 的信号,您可以处理该信号,但不能使用 C++ try/catch。如果你想处理它,你可以使用 POSIX 函数 sigaction(我认为在 Windows 上会使用结构化异常处理)。

关于c++ - 为什么GCC执行1/0会报Floating Point Exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com