這個問題已經存在了幾年,但我從來沒有聽說過一個很好的解決方案。Fortran接口本身產生惱人的錯誤
如果一個Fortran子程序包括與接口模塊本身 subroutine stuff(nz,z,dt) use allinterfaces ...
發生錯誤
Error: 'stuff' of module 'allinterfaces', imported at (1), is also the name of the current program unit
要解決它,我必須聲明 subroutine stuff(nz,z,dt) use allinterfaces, except_this_one => stuff ...
這是荒謬的行爲和惱人的,因爲我喜歡在模塊中包含所有接口。這不應該是一個編譯錯誤,或者至少應該有一個編譯器我使用的是Gfortran版本4.8.2(GCC),但我懷疑這是編譯器的錯誤。
有沒有人瞭解這種行爲背後的理由,因爲它可能是錯誤的,或更實際的解決方案?
甚至可能更荒謬的是,編譯器可以使用這些信息來檢查模塊中定義的接口是否與實際的子程序相匹配。所以這比它可能會更糟的兩個級別。忽視這些信息是一個錯失的機會;把它看作一個錯誤似乎是一個可怕的想法。
我有同樣的問題...因此,接口塊不能檢查定義本身是否正確>< – roygvib
如果您有一個使用包含接口塊的模塊的子例程那個子程序的接口,那肯定不是編譯器的錯。你在做什麼? – francescalus
@francescalus雖然我不知道OP的情況,但我只是對「標準委員會」爲什麼禁止這個事情感興趣(因爲我似乎沒有什麼好的理由)。其中一個有用的方案是從一個巨大的舊Fortran樣式包(它不包含在模塊中)中調用一個例程,並且希望確保相關子例程調用(特別是新添加的)的一致性。根據我的經驗,一些仍在積極開發的電子結構代碼是以這種風格編寫的(它甚至依賴於大量的COMMON塊......嗯)。 – roygvib