저는 Fortran을 처음 접하고 다음과 같은 것이 가능한지 이해하려고합니다. 프로그램을 구조화하기위한 나의 아이디어는 하나의 모듈에 정밀도와 변수 타입을 선언하는 것이다. 그런 다음 다른 모듈 또는 주 프로그램의 유형을 다시 선언하지 않고 이러한 변수를 사용하십시오.정밀도와 전역 변수 유형을위한 포트란 링크 모듈
gfortran -c mod_pre.f90
gfortran -c mod_hon.f90
:
module hon
use pre
implicit none
contains
function KE(H,M) result(KR)
KR = 2*PI/H/M
end function KE
end module hon
가 그럼 난 순서로 gfortran을 사용
module pre
implicit none
INTEGER, PARAMETER :: sp=SELECTED_REAL_KIND(6,37)
INTEGER, PARAMETER :: dp=SELECTED_REAL_KIND(15,307)
INTEGER, PARAMETER :: qp=SELECTED_REAL_KIND(33,4931)
REAL(dp), PARAMETER :: pi = 4.*ATAN(1.)
REAL(dp) :: H
REAL(dp) :: M
REAL(dp) :: KR
end module pre
는 지금과 같은 하나 개 이상의 기능을 포함하는 다른 모듈에있는 모든 변수의 사용을 만들고 싶어
'module pre'는 'module hon'의 일부이므로 순서대로 컴파일하지만 gfortran은 오류를 표시합니다.
위의 코드를 사용하면 변수 유형 및 매개 변수가 USE에 포함되어야한다는 것을 알았습니다. 그러나 내가받은 메시지는 gfortran에서 'module hon'를 컴파일하려고 할 때 내 변수 중 IMPLICIT 타입이 없다는 것입니다.
누군가가 문제를 명확히하거나 해결책을 제안 할 수 있습니까? 내 변수가 여러 모듈에 분산되는 것을 피하고 싶습니다.
감사합니다.
안녕하세요, francescalus, 저와 함께하시기 바랍니다. 그런 다음 변수 유형을 선언하고 해당 모듈을 다른 모듈에 사용하는 데는 아무런 쓸모가 없습니까? 예를 들어 결과 'kr'은 항상 실수 (dp)와 나머지 입력 변수입니다. 이것은 단지 한 번만 정의하는 대신 모든 단일 모듈에서 'H'또는 다른 모듈을 선언해야 함을 의미합니다. – musi
예제에서 sp, dp 및 qp는 다음과 같이 사용할 수 있습니다. 함수 종류를 정의하는'real (kind = dp) :: ke'입니다. @francescalus가 언급 한 * 변수 *'kr'는 지역 변수로 다시 정의됩니다. 지역 범위'kr '가 정의되지 않은 경우 모듈 범위'kr '이 사용됩니다. –
안녕하세요, 귀하의 답변을 주셔서 감사합니다, 나는 해결책을 찾았고 내가 찾은 유일한 방법은 함수 내부의 변수를 재정의하는 것입니다. 이제 변수에 대한 REAL (4)에서 REAL (8)로 넘어가는 gfortran 상태의 함수에 관한 다른 문제에 직면하고 있습니다. 나는 시작하기가 약간 어렵다. 이 문제를 극복 할 수있는 방법이 있습니까? – musi