09/03/16 22:18:43
サブルーチンがたくさんあるプログラムを作る時はmoduleよりもinterfaceの方が良いですか?
module間で相互にmoduleを参照(use)するとエラーが出て、悲しい状態です。
誰か教えてください。
ちなみに、moduleについて詳しく書いてある本があればそれも教えてください。
92:デフォルトの名無しさん
09/03/17 03:15:21
そのエラーがどんなものか分からないことには何とも・・・
確かにmoduleはよく考えて使わないと面倒な目に合うな
個人的にはFortranやるなら、あんまり細かく部品化しすぎないほうがいいと思う
93:デフォルトの名無しさん
09/03/17 06:23:06
>>91
module の前方参照のみしか許していないコンパイラーが多いよね。
ソースの前方に書いたmodule だけをuse するようにしてごらん。
94:デフォルトの名無しさん
09/03/17 14:24:33
>>91
コンパイラは何?
95:91
09/03/21 12:36:18
返事遅くなりました。すんません。
>92
サブルーチンは使いまくってます。
サブルーチンがないと不便です…。
>93
前方参照はmoduleをprogramより前に書けってことですよね?
moduleは別ファイルです。こんな感じになってます。
ファイルa.f90
module a
use b
contains
subroutine foo
...
end module a
ファイルb.f90
module b
use a
contains
subroutine bar
...
end module b
わかりにくい質問ですんませんでした。
>94
コンパイラはifort(ver.11)です。
inteface使えよって意見は出ないもんなんですね。
みなさんはサブルーチン使うとき、どうやってるでしょう?
96:デフォルトの名無しさん
09/03/21 19:50:38
>>91
>module間で相互にmoduleを参照(use)する
相互にuseするのって不可能じゃないの?
コンパイルするときにuseするモジュールの.modファイルが必要だし。
というか、fortranに限らず相互に呼び合うようなのは概念的に許されるのかな・・・?
もし許されるとしても、混乱の元だろうし非常にまずいような・・・・
>inteface使えよって意見は出ないもんなんですね。
>みなさんはサブルーチン使うとき、どうやってるでしょう?
interfaceの主な用途としては、fortran77で書いた外部サブルーチンを
そのままいじらずに、より安全に使いたいとき、などじゃないかな。
形状引継ぎ配列や割付け配列などの機能を使いたいときは、
いずれにしろそのサブルーチンの修正が必要になるので、そのときは大人しく
モジュールで囲ってモジュールサブルーチンに変更すべきかと思うが。
97:91
09/03/22 10:19:29
>>96
ありがとうございます。
相互に呼び出さないようにするためにはツリー構造を考えないといけないですね。
ちょっと面倒くさい気がします。
98:デフォルトの名無しさん
09/03/23 20:26:55
結局>>91のエラーは解決したの?
99:91
09/03/24 08:27:42
相互参照しないように書けば、エラーは消えます。
ただ、皆さんがどういう風に対応してるのか知りたかったのです。
お相手ありがとうございました。
100:デフォルトの名無しさん
09/03/25 12:58:20
>>99
オレ、一個の超特大module にしている。