2017-09-10 3 views
2

私はgfortranバージョン7.2.0を使用しています。私はFortranにはかなり新しいです。私はFortranの異なるバージョンがあることを知っています。以下のコードでは、私は一つのケースでは異なる構文配列を宣言する構文が異なります:ディメンションステートメントを使用する場合と使用しない場合

program arrays 
    implicit none 

    integer :: m(3, 4) 
    integer, dimension(3, 4) :: n 

    print *, "m = ", m 
    print *, "n = ", n 

end program arrays 

を使用して配列を宣言(または実際テンソル)よ、私は他に私はいないよ、dimension文を使用しています。このプログラムはコンパイルされます(エラーなし)。私はgfortranのフラグ-g-fbounds-checkを使用しています。上記のプログラムを含むファイルのファイル拡張子はf.90です。

なぜ、Fortranで配列を明示的に宣言するための構文が異なるのですか? ランクを,およびエクステントと宣言する可能性のあるバージョンのFortranサポートは、mのコンパイラの拡張版ですか?

答えて

4

integer :: m(3, 4) 
integer, dimension(3, 4) :: n 

は、Fortran 90以来

integer m(3,4) 

のような最初の行は前のFortran 90

前に有効になります::を使用せず、標準のFortranをしています別のものに来て、,dimensionは次元ではありませんステートメント属性指定。 DIMENSION文は、ここで重要なことは、型宣言で指定された属性が宣言(ほとんど)すべてのオブジェクトに適用されることである

dimension n(3,4) ! With n implicitly or explicitly typed elsewhere 

だろう。 n1n2n3形状[3,4]

の全ランク2アレイであるのに対し、そう

integer :: m1(3,4), m2, m3 
integer, dimension(3,4) :: n1, n2, n3 

m1ランク2アレイが、m2及びm3スカラー(他の配列プロパティ所与または実際に機能している場合を除き)を見

質問の2つの宣言は、「ほとんど」という事実から来ているだけで

integer, dimension(3,4) :: m, n 

可能性がありpの形状は、前に指定し[3,4]を上書きし、[5]ここで我々は

integer, dimension(3,4) :: n, p(5) 

を持つことができること。

関連する問題