2

私は完全にFORTRAN77の初心者ですが、最初のコードがエラーを示しているのに、2番目のコードが同じことを期待しているときにコンパイルされる理由がわかりません。

最初のコード(コンパイルされず、zでの予期しないデータ宣言ステートメントを引用してエラーが発生します):

program FOO

integer x, y

x = 1
y = 2

integer z 

z = 3

end

最初のコードと機能が100%似ているこのコードは、エラーなしでコンパイルされます

program FOO

integer x, y, z

x = 1
y = 2
z = 3

end

また、最初のコードで暗黙の変数宣言を無効にしてみましたが、効果はありませんでした。

4

4 に答える 4

7

Fortranは、古風な趣のある「すべてを最上位に定義する」言語の1つです。言い換えれば、これは問題ありません:

program FOO
    integer x, y
    integer z 
    x = 1
    y = 2
    z = 3
end

すべての型の指定は実行可能コードの前にあるためです。変数を定義する場合は、最初にそれを定義する必要がありますたとえば、ここを参照してください。

このような実行不可能なステートメントは、プログラムの先頭、最初の実行可能なステートメントの前に配置する必要があります。

于 2011-06-28T08:17:42.373 に答える
1

@paxdiablo:あなたは正しいと思います!

およびエラーメッセージ:

「...予期しないデータ宣言ステートメント...」

すべての削除は、最初のステートメントが発生する前に行う必要があります。fortran77は本当に「古い」ので、これがF95で変更されてもわかりません。

于 2011-06-28T08:22:00.677 に答える
1

実際の解決策はわかりませんがfortran77、変数間のコードをサポートしていない可能性があります。

例えば;

integer x, y, z

x = 1
y = 2
z = 3

動作しますが

integer x, y

x = 1
y = 2

integer z 

z = 3

動作しません。2つの整数定義(integer x, yinteger z)の間に、変数が割り当てられているためです。

于 2011-06-28T08:19:55.033 に答える
1

参考までに:暗黙の変数宣言を無効にすると、変数がどのタイプであるかを推測するFortanの機能が削除されます。

暗黙の変数宣言では、次の仮定が行われます。(大文字または小文字)で始まる変数:I、J、K、L、M、またはNはINTEGERになります。他の文字(大文字または小文字)で始まる変数はすべてREALになります。これは、明示的な型宣言がない変数にのみ適用されます。

あなたは書くことができます:

program FOO
ijk
ifjkask    
end

ijkとifjkaskはINTEGER値になります。

于 2011-06-28T08:31:17.047 に答える