2017-11-16 20 views
0

FORTRAN에서 모듈의 순환 의존성은 금지되어 있습니다. 그러나 나는 그 징벌이 얼마나 강한 지 궁금합니다. 의 내가 있다고 가정 해 봅시다 :두 개의 FORTRAN 모듈이 서로의 부분을 사용할 수 있습니까?

module mod1 
    integer, public :: i,j,k 
    use mod2, only: m 
end module mod1 

module mod2 
    integer, public :: l,m,n 
    use mod1, only: j 
end module mod2 

논리적 의미에서 순환 성을 회피 나에게 보인다, 그러나 그것은 표준이 허용하는 것을 의미하지 않는다. 작동해야합니까?

그렇다면 mod1이 mod2를보고 싶어하므로 컴파일하는 데 문제가 있습니다. 그 반대의 경우도 마찬가지입니다. 이 문제를 해결할 방법이 있습니까?

+1

* 이것은 논리적 인 의미에서 순환 성을 회피합니다. 아아, 포트란 표준이 인식한다는 의미가 아닙니다. 분명한 (?) 해결책은'm'과'j'를 모듈로 옮기는 것입니다. –

+0

@HighPerformanceMark 그래, 그럼. 즉,이 방법. 감사. –

+0

사람들이 귀하의 질문을 찾을 수 있도록 tag [fortran]을 (를) 사용하십시오. 나는 여러 번 물었다. 포트란 90은 낡고 오래된 버전입니다. 귀하의 질문이이 질문에 국한되어 있다고 확신합니까? 그렇다고하더라도 fortran 태그를 사용하고 버전 별 태그를 추가하십시오. –

답변

2

아니요, 작동하지 않아야합니다. 표준은 USE가 보일 때 모듈이 "사용 가능"해야한다고 말합니다. "mod2 사용"이 표시 될 때까지 mod2가 컴파일되지 않으면 빌드가 실패합니다. (어떤 컴파일러는 나중에 같은 소스에서 정의 된 모듈을 사용할 수있게 해주는 컴파일러를 허용 할 수도 있고 그렇지 않은 모듈도 있습니다.) 서브 모듈 (https://software.intel.com/en-us/blogs/2015/07/07/doctor-fortran-in-we-all-live-in-a-yellow-submodule 참조)을 사용하여 원하는 것을 달성 할 수 있습니다. 실제 응용 프로그램을 대표하지는 않지만 별도의 모듈에 대한 Mark의 제안은 더 쉽게 이해할 수 있습니다.