我有一個Fortran 95代碼,其輸出似乎是它不應該是一個函數的功能。具體而言,正在發生以下scenerio:程序的輸出取決於任意的打印語句?
運行代碼與版本A;它不起作用(我的意思是,它在編譯和運行時起作用,但它不能提供我期望的結果)
運行帶版本B的代碼;有用。版本B僅包含對版本A的簡單修改,如打印語句或變量數值的小改動。
使用版本A運行代碼;突然間,它工作。
我覺得有一些問題與內存或使用變量,他們正在初始化之前,所以我想知道是否有是檢查這樣的事情與gfortran
的方式,或者如果任何人知道問題可能是。我試過gfortran my_program.f95 -Wall - Wextra
,但它只是給了我一些關於不合格製表符的抱怨。
我建議你嘗試切換運行時數組邊界檢查(我認爲編譯器標誌是'-fbounds-check' for gfortran,但它不是我經常使用的編譯器,所以請查閱文檔)。正如你所總結的那樣,如果插入print語句似乎可以修復你的程序,那肯定會出錯。根據我的經驗,走出數組的末端是您報告症狀的可能原因之一。 –
嗯,這是一個好點,但'-fbounds-check'似乎沒有任何問題。 –
在這種情況下,找出編譯器選項以在編譯時檢查例程接口。我不知道該選項可能是什麼。如果它告訴你'-Wall'打開所有編譯時警告,那麼不要相信你的直覺,它可能不會。 –