728x90
반응형
1. 외부 함수 (External Functions)
주 프로그램의 END문 다음에 부프로그램을 작성한다.
예제 - 외부 부프로그램
온도 변환
! 온도 변환 외부함수 사용 버전 p219
PROGRAM Temperature_Conversion_6
!implicit none
real Celsius_to_Fahr
real :: fahrenheit, celsius
character(1) :: response
DO
! Get a Celsius temperature
write (*, '(1x, A)', ADVANCE = "NO") "Enter a Celsius temperature:"
read *, Celsius
! Use the module function Fahr_to_Celsius to convert it to Celsius
Fahrenheit = Celsius_to_Fahr(celsius)
! Output the result
print '(1x, 2(F6.2, A))', celsius, &
" in Celsius is equivalent to ", fahrenheit, " in Fahrenheit"
! Check if more temperautre ar to ber converted
write (*, '(/ 1x, A)', ADVANCE = "NO") &
"More temperatures to convert (Y or N)?"
read *, response
IF (response /= "Y") EXIT
END DO
pause
END PROGRAM Temperature_Conversion_6
Function Celsius_to_Fahr(Temp)
implicit none
real :: Celsius_to_Fahr
real, intent(in) :: Temp
Celsius_to_Fahr = (Temp - 32.0) /1.8
End Function Celsius_to_Fahr
2. 인터페이스(interface)
주 프로그램과 외부 부프로그램은 별개의 독립적 프로그램 단위이다. 따라서, 어떤 부 프로그램 내에서 지역적으로 선언된 항목을 외부 부프로그램이 접근하여 사용할 수 없다. 서로 다른 프로그램 간의 정보를 넘겨받을 수 있는 유일한 방법은 인수와 함수이름을 사용하는 것이다.
명시적 인터페이스: 내부 부프로그램과 모듈 부프로그램은 주프로그램 내에 위치하거나 USE문 이후에 나오는 코드에서 인수정보가 전달되므로, 컴파일러는 정확하게 정보전달을 확인할 수 있다.
묵시적 인터페이스: 외부 부프로그램은 주프로그램으로 부터 분리되어 있으므로, 컴파일러는 인수 정보 전달이 정확한지 확인하지 못할 수도 있다. 따라서, 외부 부프로그램도 인수전달이 정확하게 이루어지는지 명시적으로 판단하도록 할 수 있어야 하는데, 이때 인터페이스 블럭을 사용한다.
INTERFACE
인터페이스 본체
END INTERFACE
인터페이스 본체는 1) 부프로그램 헤더, 2) 형선언, 3) END FUNCTION (또는 SUBROUTINE) 으로 구성된다.
예제 - 인터페이스
! 온도변환 모듈 사용 버전 p214-216
PROGRAM Temperature_conversion_4
implicit none
INTERFACE
Function Fahr_to_Celsius(Temp)
real :: Fahr_to_Celsius
real, intent(in) :: Temp
End Function Fahr_to_Celsius
Function Celsius_to_Fahr(Temp)
real :: Celsius_to_Fahr
real, intent(in) :: Temp
End Function Celsius_to_Fahr
END INTERFACE
real :: fahrenheit, celsius
character(1) :: response
DO
! Get a Celsius temperature
write (*, '(1x, A)', ADVANCE = "NO") "Enter a Celsius temperature:"
read *, Celsius
! Use the module function Fahr_to_Celsius to convert it to Celsius
Fahrenheit = (9/5) * Celsius + 32.0
! Output the result
print '(1x, 2(F6.2, A))', celsius, &
" in Celsius is equivalent to ", fahrenheit, " in Fahrenheit"
! Check if more temperautre ar to ber converted
write (*, '(/ 1x, A)', ADVANCE = "NO") &
"More temperatures to convert (Y or N)?"
read *, response
IF (response /= "Y") EXIT
END DO
pause
END PROGRAM Temperature_Conversion_4
728x90
반응형