2012-03-28 10 views
4

私は「後藤50」のような多くの書類とレガシーFortranコードを持っています。私は、gotoのターゲットがグローバルかローカルかを疑問に思っていました。つまり、複数の関数のターゲットが「50」の場合、gotoはどこにつながりますか。FORTRAN後藤スコープ

ありがとうございます。

答えて

7

ステートメントラベル(たとえば "50")は、現在のスコープ単位内で定義する必要があります。これは、このコンテキストでは、goto呼び出しがあるサブルーチン/関数に基本的に変換されますコールはメインプログラムにあります)。

だから、たとえば、次のプログラムでは、メインプログラムとの両方がサブルーチンは、自分のラベル50を持っており、GOTOSは「彼ら」ライン50

program testgotos 
    implicit none 

    goto 50 
    call second 
50 call first 
    call second 

contains 

    subroutine first 
    integer :: a = 10 

    goto 50 
    a = 20 
50 print *,'First: a = ', a 

    end subroutine first 

    subroutine second 
    integer :: a = 20 

    goto 50 
    a = 40 
50 print *,'Second: a = ', a 

    end subroutine second 

end program testgotos 
に行く含まれています