module foo
contains
subroutine bar()
integer :: i(3)
i(1) = 1
i(2) = 2
i(3) = 3
call baz(i, i)
end subroutine
subroutine baz(a,b)
integer, intent(in) :: a(:)
integer, intent(inout) :: b(:)
b(2) = 5
print *, a
print *, b
end subroutine
end module
program xx
use foo
call bar()
end program
このコードでは、同じ配列i
を baz に渡し、異なる意図を持つ引数にバインドしています。もちろん、印刷a
すると変わります。これは未定義の動作ですか、それとも仕様によるものですか?
私はこれが起こることを完全に期待していることに注意してください。私はその動作に戸惑っていません。それが有効かどうかを理解したいだけです。