f90 と比較した場合、fortran 2003 で変数がゼロに初期化されないのはなぜですか?
ファイルの関数に変数があります。0に初期化されています。別の関数を使用したい場合、ガベージ値が表示されます。グローバル変数についても。Fortran 2003 コンパイラに設定する必要があるオプションはありますか?
f90 と比較した場合、fortran 2003 で変数がゼロに初期化されないのはなぜですか?
ファイルの関数に変数があります。0に初期化されています。別の関数を使用したい場合、ガベージ値が表示されます。グローバル変数についても。Fortran 2003 コンパイラに設定する必要があるオプションはありますか?
-zeroまたは/Qzeroを使用してみることができます。これらはローカルスカラーをゼロに初期化しますが、実際には初期値を明示的に設定する必要があります。あなたが知っているように、あなたのためにそれをするコンパイラに依存することは、バグを導入するための良い方法です。オプション名はコンパイラによって異なる場合があることに注意してください。言及されているものは、IntelVisualFortran用です。
これは、Compaq Visual Fortran から Intel Visual Fortran に移行した経験があります。彼は Fortran コンパイラに詳しくありませんが、Workshop Alex が残した投稿全体は正しいです。初期値を設定するコンパイラに頼るべきではありません。標準では、変数の値を自動的に設定する必要があるとは述べていません。そうしたとしても、このコンパイラの動作に依存するのは危険です。
Compaq Visual Fortran は、変数を自動的に初期化します。他のコンパイラはそうではありません。コードを修正する必要があります。これを行うには、すべての変数を初期化する必要があります。
ジョン
私はどの Fortran コンパイラにも詳しくありませんが、一般的に、ほとんどのコンパイラがグローバル変数とローカル変数を初期化しないことは知っています。初期化は常にコードで行う必要があります。これを行うためにコンパイラに頼るべきではありません。表示されているガベージは、おそらくスタックまたはメモリ ヒープからのものです。一部のコンパイラは、メモリを割り当てるときにヒープをゼロで埋めます。これは、一部のコンパイラが変数を 0 で初期化するように見える理由を説明できます。実際には何も初期化していません。たまたまゼロで埋められたメモリ領域を使用しているだけです。 .
変数の初期化では、Fortran 90 と Fortran 2003 の間に違いはありません。すべての有効な Fortran 90 コードは有効な Fortran 2003 であり、同じ結果が得られるはずです (ただし、コンパイラに依存する動作が標準で指定されている非常に少数のあいまいなケースを除きます。これはその 1 つではありません)。
さて、違いが見られる理由については、コンパイラが何であるか、コードが正確に何をするかを知らずに言うのは難しい. コンパイラに依存する動作に依存していたのではないかと強く思いますが、コンパイラを変更したときにそれが壊れました。