2

まず、共通のブロックを使用することは、Fortran(および一般的なプログラミング)では悪い考えであることを私は知っています。しかし、私は他の誰かのコードを更新しているので、動作することがわかっているものを台無しにしたくありません。
第二に、私はこれよりも具体的な何かを投稿する必要があることを知っています。これを小さなものに減らす方法を知っていれば、私はそうするでしょう。ただし、2500行のコードを理解しているとは思わないので、具体的な例を投稿することはできません。
それを念頭に置いて、私は自分の問題を説明することはできません。

他の人のFortranコードを更新しています。その男は、いくつかの共通ブロックを使用してグローバル変数を設定しました。どういうわけか、そのようなブロックを使用する関数を呼び出すと、その値はすべて0になります。以前に誰かがそれに遭遇したことがありますか?なぜこれが起こるのか誰かが知っていますか?これを再現する方法は?これを確認するための開始点があれば役立ちます。

その価値のために、前述の共通ブロックは次のように宣言されます

common /set/ block,x,y,z,llx,lly,llz,ilx,ily,ilz,third,third2

block4D配列です。x、、yおよびzは1D配列です。llx、、、llyおよびllzdouble precisionタイプです。残りはintegerタイプです。

共通ブロックは、関数が呼び出される前にメインプログラムで宣言および初期化されます。

4

2 に答える 2

1

一部のコンパイラは共通変数をゼロに初期化するため、最初に共通ブロックを使用して関数を呼び出すと、どこにでもゼロが見つかる可能性があります (ただし、それに依存するべきではありません)。ただし、プログラムで共通ブロック変数に値を設定すると、共通ブロックを使用するたびにそれらの値が表示されます。

共通ブロック内の変数について: 共通ブロックが使用されるすべての場所で変数が一貫して定義されている限り、任意の型にすることができます。

于 2013-02-12T14:04:29.193 に答える