수색…


포트란 프로그램

완전한 포트란 프로그램은 많은 별개의 프로그램 단위로 구성됩니다. 프로그램 단위 :

  • 주 프로그램
  • 함수 또는 서브 루틴 서브 프로그램
  • 모듈 또는 서브 모듈
  • 블록 데이터 프로그램 단위

주 프로그램과 일부 프로 시저 (함수 또는 서브 루틴) 서브 프로그램은 Fortran 이외의 언어로 제공 될 수 있습니다. 예를 들어, C 메인 프로그램은 Fortran 함수 서브 프로그램에 의해 정의 된 함수를 호출 할 수 있으며, Fortran 메인 프로그램은 C로 정의 된 프로 시저를 호출 할 수 있습니다.

이러한 포트란 프로그램 단위는 개별 파일이거나 단일 파일 내에 제공 될 수 있습니다.

예를 들어 두 파일을 볼 수 있습니다.

prog.f90

program main
  use mod
end program main

mod.f90

module mod
end module mod

컴파일러 (올바르게 호출 됨)는 주 프로그램을 모듈과 연결할 수 있습니다.

단일 파일에는 많은 프로그램 단위가 포함될 수 있습니다.

전부 .f90

module mod
end module mod

program prog
  use mod
end program prog

function f()
end function f()

그러나이 경우 함수 f 는 주 프로그램과 모듈에 관한 한 외부 함수 입니다. 그러나 모듈은 주 프로그램에서 액세스 할 수 있습니다.

입력 범위 규칙은 각 프로그램 단위에 적용되며 포함 된 파일에는 적용되지 않습니다. 예를 들어 각 범위 지정 단위에 암시 적 형식 지정을 지정하지 않으려면 위의 파일을 다음과 같이 작성해야합니다.

module mod
  implicit none
end module mod

program prog
  use mod
  implicit none
end program prog

function f()
  implicit none
  <type> f
end function f

모듈과 서브 모듈

모듈은 다른 곳에서 문서화됩니다 .

컴파일러는 종종 모듈 파일을 생성 합니다 . 일반적으로

module my_module
end module

컴파일러에 의해 my_module.mod 와 같은 이름의 파일이 생성됩니다. 이러한 경우, 프로그램 단위가 액세스 할 수있는 모듈의 경우 해당 모듈 단위가 처리되기 전에 해당 모듈 파일을 볼 수 있어야합니다.

외부 절차

외부 프로시 저는 다른 프로그램 단위 외부 또는 Fortran 이외의 다른 수단으로 정의 된 프로 시저입니다.

다음과 같은 파일에 포함 된 함수입니다.

integer function f()
  implicit none
end function f

외부 기능입니다.

외부 프로 시저의 경우 인터페이스 블록을 사용하여 해당 존재를 선언 할 수 있습니다 (명시 적 인터페이스 제공)

program prog
  implicit none
  interface
    integer function f()
  end interface
end program prog

또는 암시 적 인터페이스를 제공하는 선언문에 의해

program prog
  implicit none
  integer, external :: f
end program prog

또는

program prog
  implicit none
  integer f
  external f
end program prog

external 속성은 필요하지 않습니다.

program prog
  implicit none
  integer i
  integer f
  i = f()   ! f is now an external function
end program prog

블록 데이터 프로그램 단위

블록 데이터 프로그램 단위는 공통 블록에있는 객체에 대한 초기 값을 제공하는 프로그램 단위입니다. 이것들은 의도적으로 여기에 문서화되지 않은 채 남아 있으며, 역사적인 포트란 기능의 문서화에 포함될 것입니다.

내부 서브 프로그램

내부 서브 프로그램이 아닌 프로그램 단위는 내부 서브 프로그램 이라고하는 다른 프로그램 단위를 포함 할 수 있습니다.

program prog
  implicit none
contains
  function f()
  end function f
  subroutine g()
  end subroutine g
end program

이러한 내부 서브 프로그램에는 다음과 같은 많은 기능이 있습니다.

  • 서브 프로그램의 엔티티와 외부 프로그램 간의 호스트 연관이 있습니다.
  • 암시 적 타이핑 규칙은 상속된다 ( implicit none 은 위의 f 에서 유효하다)
  • 내부 서브 프로그램은 호스트에서 사용할 수있는 명시 적 인터페이스를 가지고 있습니다.

모듈 서브 프로그램과 외부 서브 프로그램은 다음과 같은 내부 서브 프로그램을 가질 수 있습니다.

module mod
  implicit none
contains
  function f()
  contains
    subroutine s()
    end subroutine s
  end function f
end module mod

소스 코드 파일

소스 코드 파일은 컴파일러에 의해 처리되는 (일반적으로) 일반 텍스트 파일입니다. 소스 코드 파일에는 최대 하나의 주 프로그램과 모듈 및 외부 서브 프로그램이 포함될 수 있습니다. 예를 들어, 소스 코드 파일에는 다음이 포함될 수 있습니다.

module mod1
end module mod1

module mod2
end module mod2

function func1()    ! An external function
end function func1

subroutine sub1()   ! An external subroutine
end subroutine sub1

program prog        ! The main program starts here...
end program prog    ! ... and ends here

function func2()    ! An external function
end function func2

외부 서브 프로그램이 모듈 및 메인 프로그램과 동일한 파일에 제공 되더라도 외부 서브 프로그램은 다른 구성 요소에 의해 명시 적으로 알려지지 않습니다.

또는 개별 구성 요소가 여러 파일에 분산되어 있고 다른 시간에 컴파일 될 수도 있습니다. 여러 파일을 단일 프로그램으로 결합하는 방법에 대한 컴파일러 설명서를 읽어야합니다.

단일 소스 코드 파일에는 고정 양식 또는 자유 형식 소스 코드가 포함될 수 있습니다. 컴파일시 결합되는 여러 파일의 스타일이 다를 수 있지만 혼합 할 수는 없습니다.

소스 양식을 컴파일러에 표시하려면 일반적으로 두 가지 옵션이 있습니다.

  • 파일 이름 접미사 선택
  • 컴파일러 플래그 사용

고정 또는 자유형 소스를 나타내는 컴파일 타임 플래그는 컴파일러의 설명서에서 찾을 수 있습니다.

중요한 파일 이름 접미사는 컴파일러의 설명서에도 있지만, 일반적으로 file.f90 이라는 파일은 file.f90 소스를 포함하는 반면 file.f 파일은 고정형 소스를 포함하는 것으로 file.f 됩니다.

자유 양식 소스 (Fortran 90 표준에서 소개 된)를 나타내는 데 .f90 접미사를 사용하면 프로그래머가 소스 코드가 준수하는 언어 표준을 나타내는 접미어를 사용하게됩니다. 예를 들어, .f03 또는 .f08 접미어가있는 파일을 볼 수 있습니다. 대부분의 Fortran 2003 소스는 Fortran 77, Fortran 90/5 및 Fortran 2008을 준수합니다. 또한 많은 컴파일러는 이러한 접미어를 자동으로 고려하지 않습니다.


컴파일러는 종종 (일반적으로 cpp를 기반으로하는) 내장 코드 전처리기를 제공합니다. 다시 컴파일 타임 플래그는 컴파일 전에 전처리 기가 실행되어야 함을 나타 내기 위해 사용될 수 있지만 소스 코드 파일 접미사는 전처리 요구 사항을 나타낼 수도 있습니다.

대 / 소문자를 구분하는 파일 시스템의 경우 file.F 파일은 전처리 할 고정 형식 원본 파일로 사용되며 file.F90 은 전처리 할 자유 형식 원본 파일로 사용됩니다. 앞에서와 같이, 컴파일러의 문서는 그러한 플래그와 파일 접미어를 참조해야합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow