2016-09-30 5 views
1

Fortran에서 일부 코드를 작성했지만 긴 코드를 구조화하는 방법에 대해서는 확신하지 못했습니다.포함, 인터페이스, 모듈 또는 별도의 서브 루틴 사용?

나는 종종 assumed-shape arrays을 원합니다. 이것은 interface block, module 또는 contains 문을 사용할 때 가능합니다. 그러나 메인 코드 외부에서 서브 루틴을 사용하면 이러한 방법을 사용하지 않고도 많은 경우에 사용할 수 있지만 assumed-shape arrays에는 사용할 수 없습니다.

이러한 접근 방식이 각각 어떤 맥락에서 선호되고 있으며 주요 차이점은 무엇입니까?

각 방법에서 변수를 공유/상속하는 방법은 무엇입니까?

+0

귀하의 마지막 요점은 별개의 문제입니다. 다른 곳에서 물어보십시오. 그러나 먼저 여기에서 다른 질문을 검색하십시오. –

+0

마지막 질문을 삭제했습니다. 그리고 예, "duplicate"의 답이 도움이되었습니다! 하지만 내가 사용한 핵심 단어로는 찾지 못했습니다. –

+0

어떤 수준의 복제는 사람들이 다른 문언으로 질문에서 자신의 대답을 찾도록 도와주기 때문에 좋기 때문에 걱정하지 마십시오. 요점은 여기서 다른 질문의 답을 복사하는 것이 무의미하다는 것입니다. –

답변

1

인터페이스 블록은 추가 작업입니다. 프로 시저가 변경되면 블록을 작성하고 수정해야합니다. 인터페이스 블록은 ISO C 바인딩 기능을 사용하여 C 언어 루틴을 호출하는 등의 용도로 유용합니다.

메인 프로그램에서 "contains"아래에 서브 루틴이 있으면 모든 로컬 변수가 상속된다는 단점이 있습니다. 나는 그것이 더 고립 된 절차에 더 좋다고 생각합니다.

모듈은 모듈 변수를 과도하게 사용하지 않는 한 변수를 더 명확하게 액세스하여 프로 시저를 더욱 격리시킵니다. 또한 다른 프로그램의 모듈에서 프로 시저를 재사용하기 쉽습니다.

+0

그래서'contains' 문 다음의 서브 루틴은 서로 변수를 상속받지 않습니까? 그리고 나는 동일한'contains' 블록에있는 서브 루틴에서 겹치는 변수 이름 집합을 주 코드 나 모듈에 안전하게 사용할 수 있습니까? 또는 호출 수신 서브 루틴에서 호출 수신자가 상속합니까? –

+0

대답과 기본적으로 같은 단어에 답해야한다면 그것은 아마도 중복임을 나타냅니다. –