2017-09-10 2 views
2

나는 gfortran 버전 7.2.0을 사용하고 있습니다. 나는 Fortran을 처음 접 하네. Fortran의 다른 버전이 있다는 것을 알고 있습니다. 아래의 코드에서, 내가 한 경우 다른 구문배열을 선언하는 다른 구문 : 차원 문을 사용하거나 사용하지 않음

program arrays 
    implicit none 

    integer :: m(3, 4) 
    integer, dimension(3, 4) :: n 

    print *, "m = ", m 
    print *, "n = ", n 

end program arrays 

를 사용하여 배열을 선언 (또는 실제로 텐서)하고있어, 나는 다른 내가이 아니다는 dimension 문을 사용하고 있습니다. 이 프로그램은 (오류없이) 컴파일됩니다. 나는 gfortran의 플래그 -g-fbounds-check을 사용하고 있습니다. 위의 프로그램이있는 파일의 파일 확장자는 f.90입니다.

왜 포트란에서 배열을 분명히 선언 할 수있는 다른 구문이 있습니까? 등급을 선언 할 수있는 버전은, 모양은입니다. 배열의 범위는 m이고 컴파일러의 확장 일뿐입니다.

답변

4

명령문

integer :: m(3, 4) 
integer, dimension(3, 4) :: n 

은 포트란 (90) 이후

integer m(3,4) 

같은 첫 번째 줄은 전에 포트란 (90)

전에 유효 할 것 :: 사용하지 않고 모두 표준 포트란이다 다른 것에서 오는 경우 ,dimension이 아니지만 속성 명세. 차원의 문은 여기에서 중요한 것은 유형 선언으로 지정된 속성 선언 (거의) 모든 개체에 적용한다는 것입니다

dimension n(3,4) ! With n implicitly or explicitly typed elsewhere 

될 것이다. 그래서

integer :: m1(3,4), m2, m3 
integer, dimension(3,4) :: n1, n2, n3 

n1, n2n3 모양의 모든 순위 2 배열 반면 m1 순위-2 배열,하지만 m2m3 스칼라 (다른 배열 속성을 부여하거나 실제로하지 않는 기능)을보고 [3,4]

질문의 두 가지 선언 다음은 "거의"사실에서 유래 단순히

integer, dimension(3,4) :: m, n 

p의 모양이 이전에 지정한 [3,4]을 무시 [5] 여기서 우리는

integer, dimension(3,4) :: n, p(5) 

을 가질 수 있습니다.

관련 문제