В подпрограмме или функции входная переменная может быть определена с намерением (in), и компилятор гарантирует, что внутри подпрограммы переменная не может быть изменена. Как только переменная передается (по ссылке) в другую подпрограмму, эта подпрограмма может изменять переменную без предупреждения компилятора.
Это было протестировано с помощью gfortran с кодом:
program Test
integer i
i = 21 ! half the truth
call test(i)
write (*,*) "21 expected, but is 42: ", i
end program
subroutine test(i)
integer, intent(in) :: i
call doSomethingNasty(i)
end subroutine
subroutine doSomethingNasty(i)
integer :: i
i = 42 ! set the full truth ;-)
end subroutine
Мои вопросы:
test (( i))
. Для числовых переменных t это понятно и нормально, но похоже, что это работает и с gfortran для массивов, производных типов и указателей. Это работает и с другими компиляторами? Это безопасный способ защитить мои локальные переменные?