0

私は Fortran が初めてで、仕事のために簡単なことをしているだけです。そして、一般的に新しいプログラマーとして、これがどのように機能するのか正確にはわかりません. .F ファイルの先頭には、共通の宣言があります。私にそれを説明した人は、それをCの構造体のように考え、それらはグローバルであると言いました。また、同じ.Fファイルで、どのタイプで宣言されていますか。だから、それは次のようなものです:

COMMON SOMEVAR

INTEGER*2 SOMEVAR

そして、実際に他のファイルで使用されているのを見ると、ローカル変数 (たとえば、SOMEVAR_LOCAL) を宣言し、条件に応じて、SOMEVAR_LOCAL = 1 または 0 を設定します。

次に、次のようなことを言う別の条件文があります。

IF (SOMEVAR_LOCAL. eq. 1) 
SOMEVAR(PARAM) = 1;

(これが適切な Fortran でない場合は申し訳ありませんが、現在はコードにアクセスできません)。したがって、SOMEVAR と呼ばれる、ある程度の長さ (2 バイトのデータ?) の "構造体" のような変数があり、フラグとして使用されるローカル変数があるように思えます。 struct SOMEVAR をその値に設定できます。しかし、(PARAM) があるので、その特定のインスタンスの配列のようなものですか? ありがとう。説明が下手で申し訳ありませんが、私が求めていることを理解していただければ幸いです。

4

2 に答える 2

2

@MSBがすでに述べたことを増幅するだけです。COMMONブロックは、変数をメモリに配置する方法をコンパイラに伝えます。最新の Fortran、つまり Fortran 90 以降に対応できるコンパイラでこれらを使用する理由はほとんどなく、使用を避ける十分な理由があります。

さらに 1 つ付け加えると、最新の Fortran では、C 構造体がユーザー定義型に対して行うこととほぼ同じことができます。TYPE のドキュメントを確認してください。

于 2010-06-15T06:12:31.230 に答える
1

最初の宣言には、2 バイトのスカラー整数として SOMEVAR があります。あなたが示す使用法には、インデックス付けされていることに基づいて、SOMEVAR に配列があります。Fortran では、「シーケンスの関連付け」を介してこれを行うことができますが、あまりうまくいきません。1 つのファイルで SOMEVAR を INTEGER*2 として宣言すると、このスカラーに 2 バイトが割り当てられます。別のファイルでは、INTEGER*1 SOMEVAR(2) として宣言することができ、2 バイトが予約されています。今回は、それぞれ 1 バイトの 2 つの要素の配列用です。両方のファイルで同じ共通ブロックを使用すると、これら 2 つの変数がバイトごとにオーバーラップする可能性があります (シーケンスの関連付け)。何年も前、メモリーが非常に小さかったとき、プログラマーは、さまざまなサブルーチンがさまざまなタイミングで変数を使用していることを知って、メモリー使用量を削減するためにこれを行いました。今日これを行う理由は非常に限られています。ほとんどの場合、

EQUIVALENCE ステートメントを使用してシーケンスの関連付けを設定することもできます。繰り返しますが、避けるのが最善です。EQUIVALENCE ステートメントを必要とする「トリッキーな」ことをしなければならない時代の現代的な代替手段は、TRANSFER 関数です。

于 2010-06-15T00:31:33.717 に答える