해석

2014-11-27 1 views
1

지금 잠시 동안 코드의 다음 두 줄의 의미를 알아 내기 위해 노력 해왔다 :해석

TYPE(DGRID),TARGET,ALLOCATABLE :: DGRIDS(:) 

... 난

JEK  => DGRIDS(IMOD)%JEK 

코드 블록과 IMOD를 사용하는 것은 녹색 글꼴로 표시됩니다. 이는 IMOD가 내장 함수임을 나타냅니다. 두 번째 줄이 포인터를 설정하고 있다는 것을 알고 있지만 내장 함수가 왜 있는지 알 수 없습니다. JEK를 두 번 사용할 수있는 방법이 명확하지 않습니다. 두 번째 줄에있는 두 개의 JEK가 다른 엔티티를 참조합니까? paxdiablo의 댓글이 자리에서입니다 @

+1

'IMOD'이 함수라는 것을 알지 못합니다. 예를 들어 C의 배열 구문에'dgrids [imod]'가있는 것 같습니다. 이는 또한 배열과 같이 의심스럽게 보이는'DGRIDS (:)'에 의해서도 지원됩니다. – paxdiablo

답변

5

, 방금

TYPE(DGRID),TARGET,ALLOCATABLE :: DGRIDS(:) 

유형 dgrid의 것들의 배열을 선언 ... 담당자의 자만심을 추구 그것을 조금 확장합니다. 그것과 다른 라인은 분명히 코드의 다른 부분에 선언문이 있습니다.

type :: dgrid 
    ... 
    <type> :: jek 
    ... 
end type 

은 복구 된 조각입니다. 따라서 jek (저는 Fortran 자체처럼 대소 문자를 구분하지 않습니다)는 dgrid 유형의 요소 이름으로 사용됩니다.

라인

JEK  => DGRIDS(IMOD)%JEK 

연관 소자 어레이 dgridsimod 번째 요소 jek으로 jek라는 포인터. 코드에서 다른 곳 CodeBlocks가 imod는 당신을 오해의 소지 함수 인수가 imod()로 호출 할 필요가 없을 것으로도 기능이 있음을 알 수있는 경우이

<type_of_jek>, pointer :: jek 

같은 선언이다. imod은 정수 여야합니다.

jek이라는 이름이 두 번 사용되면 다른 것을 식별합니다. 아마도 프로그래머의 손가락은 DGRIDS(IMOD)%을 반복적으로 입력하는 것에 지쳐 갔고 프로그래머는 의 약식 별칭으로 jek을 사용한다는 생각에 부딪쳤을 것입니다. 최첨단 컴파일러를 사용하면 associate 문을 사용하여 동일하게 구현할 수 있습니다.하지만 포트란 포인터에 대한 일반적인 대체는 아니며 별칭을 정의하기위한 대체 메커니즘입니다.

+0

코멘트에서 "감사합니다"라고 말하면서 일반적으로 눈살을 찌푸리게됩니다. 그러나이 경우에, 이것은 나 자신을 멈출 수 없을 정도로 분명하고 도움이됩니다. 또한, 제가 말씀 드린 선언의 존재에 대해 당신이 100 % 맞다고 말하고 싶습니다. 젠장, 너 괜찮아. – boxofchalk1