2009-07-21 28 views
5

f90と比較してFortran 2003で変数がゼロに初期化されないのはなぜですか?Fortran 2003で変数が初期化されていません

ファイルの関数内に変数があります。 0に初期化されています。別の関数を使用したい場合、ガベージ値を表示します。グローバル変数の場合でも。 Fortran 2003コンパイラに設定する必要があるオプションはありますか?

+1

どのfortran 2003コンパイラを使用していますか? – tvanfosson

答えて

3

私はFortranコンパイラには慣れていませんが、一般的に、ほとんどのコンパイラはグローバル変数とローカル変数を初期化しません。初期化は常にコードで行う必要があります。これを行うためにコンパイラに頼るべきではありません。 あなたが見ているゴミはおそらくスタックまたはメモリヒープからです。いくつかのコンパイラが0で変数を初期化するように見える理由を説明できるメモリを割り当てるときに、ヒープをゼロで埋めるようにするコンパイラもあります。実際には何も初期化していない、ゼロで埋められたメモリ領域を使用しています。

+3

うわー - Fortranコンパイラには慣れていませんが、依然として意見を提供しています。ちょうどうわー。 –

+3

私はコンパイラがどのように動作するかを知っています。一般的にコンパイラの経験が多いので、Fortranの違いはあまりありません。この質問には、どのFortranコンパイラが使用されているかは言及されていないので、結局少し汎用的です。 –

7

-zeroまたは/ Qzeroを使用すると、ローカルスカラーをゼロに初期化できますが、実際には明示的に初期値を設定する必要があります。あなたが知っているように、それを行うためのコンパイラに応じて、バグを導入する良い方法です。コンパイラごとにオプション名が異なることに注意してください。記載されているのはIntel Visual Fortranです。

2

変数の初期化では、Fortran 90とFortran 2003の間に違いはありません。有効なFortran 90コードはすべてFortran 2003で有効で、同じ結果が得られるはずです(ただし、コンパイラ依存の動作が標準で指定されているようなあいまいなコーナーケースはほとんどありません。

ここで違いが分かる理由は、コンパイラが何であるか、コードが正確に何をしているかを知らなくても言い難いことです。コンパイラ依存の動作に頼っていると強く思っています。コンパイラを変更したときに壊れました。

4

これは、Compaq Visual FortranからIntel Visual Fortranへの移行を経験しました。彼のFortranコンパイラに精通していないにもかかわらず、Workshop Alexによって残されたポスト全体が正しいです。コンパイラの初期値の設定に頼るべきではありません。標準は、変数値が自動的に設定されるべきであるとは言いません。たとえそれがあったとしても、このコンパイラの動作に依存するのは危険です。

Compaq Visual Fortranは変数を自動的に初期化します。他のコンパイラではそうではありません。あなたのコードを修正する必要があります。すべての変数を初期化することによってのみ行うことができます。

ジョン

関連する問題