7

Fortran宣言ステートメントで変数を初期化すると、その変数は暗黙的にSAVE属性を受け取り、初期化式は1回だけ実行されます。

たとえば、次のプログラム

program test
implicit none

    call foo()
    call foo()

contains

    subroutine foo ()
        integer :: i = 0

        i = i + 1
        write(*,*) i
    end subroutine foo
 end program test

印刷します

1
2

これは他の多くの言語では異なるので、Fortran標準委員会がなぜこの動作を選択したのか疑問に思いました。

どうもありがとう!マイク

4

1 に答える 1

10

これは主に歴史的な理由によるものです。古いコンパイラ (Fortran IV(66) 以前) は、主に静的メモリを使用してプログラムを生成するために実装されていました。古いマシンにはスタックさえありませんでした。したがって、変数が として定義されているように、プログラムは動作しますsave

変数の初期化の前身であるDATAステートメントは、C で知っている呼び出し時の変数の初期化よりも、静的メモリの初期内容を定義することに似ています (アセンブリのデータ セグメントのディレクティブに似ています)。構文は次のようになりました。 Cバリアントは後で。

于 2013-01-28T15:50:08.677 に答える