이제 (*)와 같은 줄을 포함하는 이전 Fortran 코드를 업데이트하려고합니다.
allocate( a(2), b(2) )
a(:) = 0.0
b(:) = 0.0
처음에는
allocate( a(2), source=0.0 )
allocate( b(2), source=0.0 )
그러나 이것은 분명히 그리 간단하지 않습니다. 그래서 저는 그것들을 결합하여
allocate( a(2), b(2), source=0.0 ) !! (1)
나는 그것이 작동 할 것이라고 기대하지 않았지만 실제로 gfortran> = 4.8 및 Sun fortran 8.7에서 작동했습니다 (ifort-14에서는 작동하지 않음). 그래서 F2003 및 F2008 문서 의 ALLOCATE 섹션을 살펴본 결과 F2008에서는 "소스 =가 표시되면 할당 목록에 할당 개체 가 하나만 포함되어야합니다 "라는 제한이 F2008에서 제거 된 것 같습니다 . 이것은 위의 행 1이 F2008에서 문제가되지 않으며 다른 동작이 단순히 F2008 지원 정도가 다르기 때문이라는 것을 의미합니까?
(*) 실제 코드에서는 파생 유형의 여러 배열 구성 요소 allocate( conf% crd(3,N), conf% vel(3,N), conf% frc(3,N), blah, blah,... )
를 할당하고 각각에 0을 할당하려고했습니다. 그래서 나는 그 라인을 다소 단순화 할 수 있는지 궁금합니다.
높은 수준에서 예, Fortran 2008에서는 소스 할당에 개체가 하나만 있다는 Fortran 2003의 제한이 제거되었습니다.
이제 다른 문제로 넘어갑니다. 첫째, a
및 의 선언을 표시하지 않습니다 b
. 소스 할당에서 할당 할 개체는 소스와 유형이 호환되어야합니다. 간단한 경우
real, allocatable, dimension(:) :: a, b
allocate( a(2), b(2) )
a(:) = 0.0
b(:) = 0.0
Fortran 2008 효과는
real, allocatable, dimension(:) :: a, b
allocate( a(2), b(2), source=0.0 )
하지만 어떨까요
double precision, allocatable, dimension(:) :: a, b
allocate( a(2), b(2), source=0.0 )
?
그리고 이전의 두 번째 요점은 Fortran 2008은 비교적 새로운 것입니다. 모든 컴파일러가 소스 할당에서 여러 개체를 사용하여 규칙을 올바르게 구현한다고 믿지는 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다