gcc(Linux/MinGW)是否存在编译器标志,以便在运行时引发除以零的错误
Does a compiler flag exist for gcc (Linux/MinGW) to raise a division by zero error at run time?
我有一个用C++编写的复杂模型,其中分母有时恰好是零。我通常会检查它们,但当我忘记的时候,调试它们会很痛苦,因为模型在没有警告的情况下继续运行。
有没有一个编译器标志,在linux上的最新版本的gcc和windows上的MinGW中都可以使用,我可以用它来告诉gcc进行编译,以便在发生(双精度之间)除以零时引发运行时错误?这在计算上是昂贵的吗(所以只在调试构建中启用它)?
我知道这里也发布了一个类似的问题,但答案更多的是技术和理论上的快速评论,而不是一个成熟的答案。
对于linux中的gcc,您可以使用fenv.h,或者由于c++11 cfenf和windows上有_controlfp
目前我能找到的最好的方法是在Linux中进行检查,并在MinGW中忽略它(_controlfp似乎对我的安装不起作用)。这在我的用户案例中不是问题,因为开发无论如何都是在Linux中进行的:
#include <iostream>
#ifdef __GNUC__
#ifndef __MINGW32__
//#define _GNU_SOURCE // contrary to other answers, this seems no longer needed as defined by default
#include <fenv.h>
#endif
#endif
int main(int argc, char* argv[]){
#ifdef __GNUC__
#ifndef __MINGW32__
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
#endif
#endif
double num = 4.0;
double den = 0.0;
double ratio = num/den;
std::cout << "ratio: " << ratio << std::endl;
}
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 分配给gslice_array会导致运行时错误
- cout 新创建的对象引发运行时错误
- C++在使用std::multimap时出现运行时错误的几率很小
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 试图找出为什么我会收到运行时错误?
- 迭代二维矢量时发生运行时错误
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误