2017-11-16 18 views
0

私は、FORTRANでのモジュールの循環依存性が禁止されていることを知っています。しかし、私はその徴用がどれほど強いのだろうと思っています。のは、私が持っているとしましょう:2つのFORTRANモジュールが互いの部分を使用できますか?

module mod1 
    integer, public :: i,j,k 
    use mod2, only: m 
end module mod1 

module mod2 
    integer, public :: l,m,n 
    use mod1, only: j 
end module mod2 

論理的な意味での真円度を回避していることに私には思われるが、それは標準がそれを可能にするという意味ではありません。それは動作するはずですか?

もしそうなら、mod1はmod2を見たいと思うので、私はコンパイルに問題があります。その逆もあります。これを回避する方法はありますか?

+1

*これは論理的な意味で循環性を避けているようです*。なぜなら、Fortran標準が認識している意味ではありません。明白な(?)回避策は、 'm'と' j'をモジュールに移動することです。 –

+0

@HighPerformanceMark [OK]をクリックします。そういうものだ。ありがとう。 –

+0

本当にあなたの質問を見つけることができるようにtag [tag:fortran]を使ってください。私は複数回それを尋ねました。 Fortran 90は古くて古いバージョンでもあります。あなたの質問はそれに限定されていると確信していますか?はいの場合でも、fortranタグを使用して、バージョン固有のタグを追加します。 –

答えて

2

いいえ、動作しません。標準では、USEが見られるときにモジュールが「使用可能」でなければならないと述べています。 mod2が "use mod2"の時間までにコンパイルされていない場合、ビルドは失敗します。 (一部のコンパイラでは、後で同じソースで定義されたモジュールを使用することができますが、そうでないモジュールもあります)サブモジュール(https://software.intel.com/en-us/blogs/2015/07/07/doctor-fortran-in-we-all-live-in-a-yellow-submoduleを参照)を使用すると、あなたが望むものを達成できるかもしれません。あなたの実際のアプリケーションを代表するものではありませんが、Markの別のモジュールの提案は理解しやすいものです。

関連する問題