Fortran-모듈
모듈은 매우 큰 프로그램을 작성하거나 함수 나 서브 루틴을 둘 이상의 프로그램에서 사용할 수있는 경우 함수와 서브 루틴을 유지할 수있는 패키지와 같습니다.
모듈은 프로그램을 여러 파일로 분할하는 방법을 제공합니다.
모듈은-
서브 프로그램, 데이터 및 인터페이스 블록 패키징.
둘 이상의 루틴에서 사용할 수있는 글로벌 데이터를 정의합니다.
선택한 루틴 내에서 사용할 수있는 변수 선언.
사용을 위해 다른 프로그램이나 서브 루틴으로 모듈 전체를 가져옵니다.
모듈 구문
모듈은 두 부분으로 구성됩니다.
- 명령문 선언을위한 사양 부분
- a는 서브 루틴 및 함수 정의를위한 부분을 포함합니다.
모듈의 일반적인 형태는 다음과 같습니다.
module name
[statement declarations]
[contains [subroutine and function definitions] ]
end module [name]
프로그램에 모듈 사용
use 문으로 프로그램이나 서브 루틴에 모듈을 통합 할 수 있습니다.
use name
점에 유의하시기 바랍니다
필요한만큼 모듈을 추가 할 수 있으며, 각 모듈은 별도의 파일에 있으며 별도로 컴파일됩니다.
모듈은 다양한 프로그램에서 사용할 수 있습니다.
모듈은 동일한 프로그램에서 여러 번 사용할 수 있습니다.
모듈 사양 부분에서 선언 된 변수는 모듈에 전역 적입니다.
모듈에서 선언 된 변수는 모듈이 사용되는 모든 프로그램 또는 루틴에서 전역 변수가됩니다.
use 문은 주 프로그램이나 특정 모듈에서 선언 된 루틴 또는 변수를 사용하는 다른 서브 루틴 또는 모듈에 나타날 수 있습니다.
예
다음 예제는 개념을 보여줍니다-
module constants
implicit none
real, parameter :: pi = 3.1415926536
real, parameter :: e = 2.7182818285
contains
subroutine show_consts()
print*, "Pi = ", pi
print*, "e = ", e
end subroutine show_consts
end module constants
program module_example
use constants
implicit none
real :: x, ePowerx, area, radius
x = 2.0
radius = 7.0
ePowerx = e ** x
area = pi * radius**2
call show_consts()
print*, "e raised to the power of 2.0 = ", ePowerx
print*, "Area of a circle with radius 7.0 = ", area
end program module_example
위의 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Pi = 3.14159274
e = 2.71828175
e raised to the power of 2.0 = 7.38905573
Area of a circle with radius 7.0 = 153.938049
모듈에서 변수 및 서브 루틴의 접근성
기본적으로 모듈의 모든 변수와 서브 루틴은 모듈 코드를 사용하는 프로그램에서 사용할 수 있습니다. use 성명서.
그러나 다음을 사용하여 모듈 코드의 접근성을 제어 할 수 있습니다. private 과 public속성. 일부 변수 또는 서브 루틴을 개인용으로 선언하면 모듈 외부에서 사용할 수 없습니다.
예
다음 예제는 개념을 보여줍니다-
이전 예에서는 두 개의 모듈 변수가있었습니다. e 과 pi. 그들을 비공개로 만들고 출력을 관찰합시다.
module constants
implicit none
real, parameter,private :: pi = 3.1415926536
real, parameter, private :: e = 2.7182818285
contains
subroutine show_consts()
print*, "Pi = ", pi
print*, "e = ", e
end subroutine show_consts
end module constants
program module_example
use constants
implicit none
real :: x, ePowerx, area, radius
x = 2.0
radius = 7.0
ePowerx = e ** x
area = pi * radius**2
call show_consts()
print*, "e raised to the power of 2.0 = ", ePowerx
print*, "Area of a circle with radius 7.0 = ", area
end program module_example
위의 프로그램을 컴파일하고 실행하면 다음과 같은 오류 메시지가 나타납니다.
ePowerx = e ** x
1
Error: Symbol 'e' at (1) has no IMPLICIT type
main.f95:19.13:
area = pi * radius**2
1
Error: Symbol 'pi' at (1) has no IMPLICIT type
이후 e 과 pi, 둘 다 private으로 선언되며 module_example 프로그램은 더 이상 이러한 변수에 액세스 할 수 없습니다.
그러나 다른 모듈 서브 루틴은 액세스 할 수 있습니다.
module constants
implicit none
real, parameter,private :: pi = 3.1415926536
real, parameter, private :: e = 2.7182818285
contains
subroutine show_consts()
print*, "Pi = ", pi
print*, "e = ", e
end subroutine show_consts
function ePowerx(x)result(ePx)
implicit none
real::x
real::ePx
ePx = e ** x
end function ePowerx
function areaCircle(r)result(a)
implicit none
real::r
real::a
a = pi * r**2
end function areaCircle
end module constants
program module_example
use constants
implicit none
call show_consts()
Print*, "e raised to the power of 2.0 = ", ePowerx(2.0)
print*, "Area of a circle with radius 7.0 = ", areaCircle(7.0)
end program module_example
위의 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Pi = 3.14159274
e = 2.71828175
e raised to the power of 2.0 = 7.38905573
Area of a circle with radius 7.0 = 153.938049