Sök…


Fortran-program

Ett komplett Fortran-program består av ett antal olika programenheter. Programenheter är:

  • huvudprogram
  • funktion eller underprogram
  • modul eller undermodul
  • blockera dataprogramenheten

Huvudprogrammet och vissa procedurer (funktion eller subroutine) delprogram kan tillhandahållas av ett annat språk än Fortran. Till exempel kan ett C-huvudprogram ringa en funktion definierad av ett underprogram för Fortran-funktion, eller ett Fortran-huvudprogram kan anropa en procedur definierad av C.

Dessa Fortran-programenheter kan ges olika filer eller i en enda fil.

Vi kan till exempel se de två filerna:

prog.f90

program main
  use mod
end program main

mod.f90

module mod
end module mod

Och kompilatorn (påkallas korrekt) kan koppla huvudprogrammet till modulen.

Den ena filen kan innehålla många programenheter

everything.f90

module mod
end module mod

program prog
  use mod
end program prog

function f()
end function f()

Men i detta fall måste det noteras att funktionen f fortfarande är en extern funktion när det gäller huvudprogrammet och modulen. Modulen är dock tillgänglig via huvudprogrammet.

Regler för att skriva omfattning gäller för varje enskild programenhet och inte för filen i vilken de finns. Om vi till exempel vill att varje scoping-enhet inte ska ha någon implicit typning måste filen ovan skrivas som

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

Moduler och undermoduler

Moduler dokumenteras någon annanstans .

Kompilatorer genererar ofta så kallade modulfiler : vanligtvis den fil som innehåller

module my_module
end module

kommer att resultera i en fil som heter något liknande my_module.mod av kompilatorn. I sådana fall måste en modulfil vara synlig innan en senare programenhet behandlas för att en modul ska kunna nås av en programenhet.

Externa förfaranden

En extern procedur är en som definieras utanför en annan programenhet, eller på ett annat sätt än Fortran.

Funktionen som finns i en fil som

integer function f()
  implicit none
end function f

är en extern funktion.

För externa procedurer kan deras existens förklaras med hjälp av ett gränssnittsblock (till ett uttryckligt gränssnitt)

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

eller genom ett uttalande för att ge ett implicit gränssnitt

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

eller ens

program prog
  implicit none
  integer f
  external f
end program prog

Det external attributet är inte nödvändigt:

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

Blockera dataprogramenheter

Blockdata-programenheter är programenheter som tillhandahåller initialvärden för objekt i vanliga block. Dessa lämnas medvetet okokumenterade här och kommer att visas i dokumentationen av historiska Fortran-funktioner.

Interna underprogram

En programenhet som inte är ett internt underprogram kan innehålla andra programenheter, kallade interna underprogram .

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

Ett sådant internt underprogram har ett antal funktioner:

  • det finns värdförening mellan enheter i delprogrammet och det yttre programmet
  • implicit typregler ärvs ( implicit none gäller i f ovan)
  • interna underprogram har ett tydligt gränssnitt tillgängligt i värden

Underprogram och externa underprogram för moduler kan ha interna underprogram, t.ex.

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

Källkodsfiler

En källkodfil är en (vanligtvis) vanlig textfil som ska bearbetas av kompilatorn. En källkodfil kan innehålla upp till ett huvudprogram och valfritt antal moduler och externa underprogram. Till exempel kan en källkodfil innehålla följande

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

Vi bör här komma ihåg att även om de externa underprogrammen ges i samma fil som modulerna och huvudprogrammet, är de externa underprogrammen inte uttryckligen kända av någon annan komponent.

Alternativt kan de enskilda komponenterna spridas över flera filer och till och med sammanställas vid olika tidpunkter. Compilerdokumentation bör läsas om hur man kombinerar flera filer till ett enda program.

En enda källkodfil kan innehålla antingen källkod med fast form eller fri form: de kan inte blandas, även om flera filer som kombineras vid kompileringstid kan ha olika stilar.

För att ange källformuläret till kompilatorn finns det i allmänhet två alternativ:

  • val av filnamnsuffix
  • användning av kompilatorflaggor

Kompileringstidsflaggan för att ange en fast eller fri formkälla kan hittas i kompilatorns dokumentation.

De betydande filnamnssuffixerna finns också i kompilatorns dokumentation, men som en allmän regel tas en fil med namnet file.f90 till att innehålla fri file.f medan filen file.f anses innehålla källa med fast form.

Användningen av .f90 suffix för att indikera källa i fri form (som infördes i Fortran 90-standarden) frestar ofta programmeraren att använda suffixet för att indikera den språkstandard som källkoden överensstämmer med. Vi kan till exempel se filer med .f03 eller .f08 suffix. Detta är vanligtvis att undvika: de flesta Fortran 2003-källor överensstämmer också med Fortran 77, Fortran 90/5 och Fortran 2008. Dessutom överväger många comilers inte automatiskt sådana suffix.


Kompilatorer erbjuder ofta en inbyggd kodförberedare (generellt baserat på cpp). Återigen kan en kompileringstidsflagg användas för att indikera att förbehandlaren bör köras före kompilering, men källkodsfilsuffixet kan också indikera ett sådant förbehandlingsbehov.

För file.F filsystem file.F ofta vara en källfil för fast form som ska förbehandlas och file.F90 vara en källa för friform som ska förbehandlas. Som tidigare bör kompilatorns dokumentation konsulteras för sådana flaggor och filsuffix.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow