1

すでにこの質問をしましたが、今回はより明確にしようとしています。私は本当にfortranに慣れていないので、構文エラーを許してください。これは疑似コードです。

module variables
   implicit none
   SAVE

   integer x
   integer y

 end module

subroutine init()

  use variables

  x = x + 2
  y = y + 1
endsubroutine

それから私のメインプログラムは

 program main
    use variables
    implicit none

    call init()

    call some_other_function()
  endprogram

モジュールを含めた場合、some_other_function() で値を保持しますか? some_other_function() は巨大なシミュレーション プログラムの抽象化であると想定します。初期化された変数が値を保持し続けることに頼ることはできますか?

それはモジュールの SAVE ステートメントでしたか?

背景情報: 私はかなりの時間、program2 によって呼び出されている program1 を持っています。Program1 には、1 回だけ実行する必要がある大規模な初期化フェーズがあります。program2 が program1 を呼び出す前にその初期フェーズを実行した場合、保存されているすべてのモジュール宣言変数に依存できますか?

4

1 に答える 1

3

モジュール内のSAVEステートメントでは、モジュール変数の値はプログラムの実行中に保持されます。1 つのプロシージャでそれらを初期化すると、メイン プログラムと他のプロシージャはそれらの値を認識します。モジュール変数は、スコープ内にある限り保持されるためuse、メイン プログラムからのサンプル モジュールであるため、SAVEステートメントがなくても実行中は値が保持されます。原則として、モジュールが一部のプロシージャでのみ使用され、SAVEステートメントが使用されていない場合、呼び出しチェーンにプロシージャが存在しない場合、コンパイラは値を「忘れる」可能性があります。おそらく多くの、またはおそらくすべてのコンパイラが実際に値をリセットするわけではありません...モジュールがスコープ外に出たかどうかを判断するには、余分な作業が必要になります。

PS x と y を初期化しないため、この例にはエラーがあります。それらの値を変更するだけです。

于 2013-04-04T17:51:11.940 に答える