, 코드의 다음 조각이 작동하지 왜 난 정말 알고 싶습니다 :포트란 배열은 함수에서 반환 할 수 없습니다하지 않는 더미 변수
program test2
implicit none
!!! A program to practice f90 writing.
! Define double precision data
integer, parameter :: dp = kind(1.d0)
real(dp) :: a(3), b(3)
integer :: i
a = (/(i, i=1, 3)/)
b = (/(i, i=1, 3)/)
write (*, *) m31tensorprod(a, b)
contains
function m31tensorprod(a, b)
real(dp), dimension(3), intent(in) :: a, b
real(dp), intent(out) :: m31tensorprod(3, 3)
integer :: k1, k2
forall(k1=1:3, k2=1:3)
m31tensorprod(k1, k2) = a(k1) * b(k2)
end forall
return
end function m31tensorprod
end program test2
I gfortran test2.f90를 통해이 문제를 컴파일하려고, 그것은 말한다 :
test2.f90 : 13.4 :
function m31tensorprod(a, b) 1 Error: Symbol at (1) is not a DUMMY variable
나는 m31tensorprod
가 내부 함수이기 때문에 그것을 선언 할 필요가 없다고 생각했다. 나는 어디에서 잘못 했는가?
덕분에,
인 텐트 (out)은 결과에 적합하지 않습니다. 자세한 내용은 http://stackoverflow.com/q/24170024/3157076을 참조하십시오. – francescalus
@francescalus 답변 해 주셔서 감사합니다. 나는 언급 된 질문에 갔다. 그 뜻은 : 변수'function_name'에 대해서는 아직 메모리에 할당 된 주소가 없으므로 출력 주소를 가리키는 더미 변수가 아닙니다. 따라서 '의도 (out)'는 불법입니다. 그게 맞습니까? –
"Dummy"는 함수에 대한 인수를 의미합니다. 이 경우'a'와'b'_in_ 함수가 있습니다. 의도는 더미 변수에 대해서만 지정할 수 있습니다. – francescalus