簡體   English   中英

是否存在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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM