簡體   English   中英

gfortran警告浮點異常

[英]gfortran warn on floating point exception

我正在使用gfortran編寫一些代碼。 一段時間以來,我一直在與

-ffpe-trap=zero,overflow,invalid

試圖找出一些錯誤。 這導致我的程序立即停止執行。 在某些情況下,FPE可能會正常運行,因此會出現如下標記:

-ffpe-warn=zero,overflow,invalid

會非常有用。 gfortran(或任何其他編譯器)是否提供類似的功能? 如果沒有,是否有任何解決方法? 我目前的想法是創建一個C函數來注冊信號處理程序以寫出警告,盡管我不知道該怎么做。

我不知道遇到浮點異常的警告方式。 但是gfortran和ifort都有信號處理例程。 例如,請參見信號的gfortran文檔以及《 Intel Fortran編譯器用戶和參考指南》(警告:大PDF) (請參閱病房第410頁)。

您可以通過調用signal建立以下signal

  • 忽略指定的信號(由數字標識)。
  • 對指定信號使用默認操作,這可以重置先前建立的操作。
  • 將控制權從指定的信號轉移到接收信號的過程,該過程由名稱指定。

對於您的情況,您可能想編寫一個函數來在發生浮點異常(例如,打印文件名/行號)時執行某些操作,並使用上面列表中的第三個選項。

不幸的是,這不是很容易移植:請看此頁面 ,了解各種編譯器的信號處理示例。 如果需要,可以將一些代碼包裝在預處理器宏中

  • 用多個編譯器編譯
  • 僅在設置了某些預處理器標志的情況下才使用信號處理例程(參見-NDEBUG

更新:最終,如High Performance Mark所建議的那樣, ieee_exceptions內部模塊的異常處理工具將是可移植的方法。

暫無
暫無

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

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