1

共通ブロックを深く使用してグローバル変数を定義する商用コードをカスタマイズしています。

私がやりたいのは、これらの変数の 1 つだけをサブルーチンに渡し、インクルードを作成しないことです。なぜなら、共通として定義された他のいくつかの変数は必要ないからです。

これを行う唯一の方法は、以前に新しいローカル変数を定義し、それにグローバル変数の値を割り当ててから、新しい変数をサブルーチンに渡すことでしたが、その方法は好きではありません..

サブルーチンに変数を渡すときに変数をローカルに変換するよう Fortran に指示する解決策はありますか?

ここに一例があります:

メインプログラム:

INTEGER :: A
REAL :: Y(20)
COMMON /VARS/ Y, A
INTEGER :: res, transfer_var
transfer_var = A
call sub_test(transfer_var, res)
...

サブルーチン:

subroutine sub_test(var1, var2)
INTEGER, intent(in) :: var1
INTEGER, intent(out) :: var2
var2 = 1 + var1
return
end
4

1 に答える 1

0

これは、説明した動作を示さないコードの最小限の実例です。 Amain で割り当てられ、common によって sub_one に渡され、サブルーチンの引数として直接使用されます。

 implicit none
 INTEGER :: A,res
 COMMON /VARS/ A
 A=41
 call sub_one()
 end 

 subroutine sub_one()
 INTEGER :: A,res
 COMMON /VARS/ A
 call sub_test(a,res)
 write(*,*)res
 end

 subroutine sub_test(var1, var2)
 INTEGER, intent(in) :: var1
 INTEGER, intent(out) :: var2
 var2 = 1 + var1
 return
 end

これは問題なくコンパイルされ、結果が返されます42

問題を示すコード例を提供できますか?

于 2014-11-14T21:11:05.683 に答える