У меня есть устаревший код fortran со многими операторами, такими как «goto 50». Мне было интересно, является ли цель goto глобальной или локальной. Я имею в виду, если несколько функций имеют цель «50», куда ведет goto.
Спасибо за ответы.
У меня есть устаревший код fortran со многими операторами, такими как «goto 50». Мне было интересно, является ли цель goto глобальной или локальной. Я имею в виду, если несколько функций имеют цель «50», куда ведет goto.
Спасибо за ответы.
Метки оператора (например, "50") должны быть определены в текущей "единице области видимости", которая в данном контексте в основном переводится в подпрограмму/функцию, в которой находится вызов goto (или в основной программе, если вызов находится в основную программу).
Так, например, в следующей программе основная программа и обе содержащиеся в ней подпрограммы имеют собственную метку 50, а переходы идут к «своей» строке 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
Местный.
Технически из стандарта f77 ( http://www.fortran.com/fortran/F77_std/f77_std.html )
«Метки операторов имеют область действия программной единицы».