Dies ist eine alte Version des Dokuments!


Programmstruktur

Schauen wir uns das Hello-World Programm einmal genauer an, so bemerken wir, dass die Anweisungen eingerückt sind. Das ist dadurch bedingt, dass dieser Quellcode im Fixed-Form-Zeilenformat geschrieben ist.

	PROGRAM HELLO_WORLD
		write (*,*) "Hello World"
	END

Free Form (Fortran 90 / 95)

In Fortran 95 wurde das Free Form Format eingeführt; so schreibt sich Fortran im Prinzip ähnlich wie neuere Sprachen. Dabei gelten dennoch einige Einschränkungen:

  • Die Zeilenlänge darf 132 Zeichen nicht überschreiten
  • Fortsetzungszeilen sind erlaubt und werden mit dem kaufmännischen Und '&' am Ende der fortzusetzenden Zeile verdeutlicht.
    • Optional ist auch am Anfang der weiterführenden Zeile ein Kaufmanns-Und erlaubt
    • Standardmäßig sind 40 Fortsetzungszeilen erlaubt

Übersetzung mit gfortran

Der Compiler gfortran schaut sich die Dateiendungen der Codedateien an, und entscheidet danach, was zu tun ist:

  • code.f → fixed form und kein Preprocessing
  • code.f90 → free form und kein Preprocessing
  • code.F → fixed form mit Preprocessing
  • code.F90 → free form mit Preprocessing

Sie können dem Compiler auch dazu zwingen den Code als free form zu übersetzen. Das funktioniert mit dem Compiler-Flag -ffree-form, bspw.:

gfortran -ffree-form code.f -o code.exe

Fixed Form (Fortran 77)

Im Fortran 95 Standard ist dieses Zeilenformat aus Kompatibilitätsgründen ebenfalls noch vorhanden. Es wird nicht empfohlen diese Art zu verwenden, sondern es sollte in neueren Programmen das Free Form Format verwendet werden. Sollten Sie mal alten Fortran Code lesen und verstehen müssen, so erinnern Sie sich an das unten stehende Zeilenformat.

Einrückung / Zeilenformat

Zunächst einmal fällt auf, dass der Code mit einem Tabulator eingerückt ist. Ursprünglich wurde für Fortran ein bestimmtes Zeilenformat definiert. Dabei gilt, dass grundsätzlich eine Anweisung pro Zeile steht, Fortsetzungszeilen sind möglich, müssen aber gesondert angezeigt werden. Das Format einer Zeile sieht wie folgt aus:

Spalte 1-5 Spalte 6 Spalte 7-72 Spalte 73 - 80
leer oder Ziffernmarke (Sprungmarke) frei oder Zeichen (ungleich 0) Anweisungstext Folgenummerierung (wird vom Compiler ignoriert)

Die ersten 5 Zeichen sind leer oder mit einer Ziffernmarke versehen, die als Sprungmarke fungiert. Die Spalte 6 gibt an, ob es sich um eine Fortsetzungszeile handelt. Dann folgt in Spalte 7 bis 72 der eigentliche Anweisungstext, die restlichen Spalten 73 bis 80 werden vom Compiler ignoriert, und waren eine Art Folgennummerierung, die es möglich gemacht hat, den Code zu sortieren.

Wichtig ist also zunächst, dass die ersten 6 Zeichen vorerst nicht belegt sind und der Code nur bis Spalte 72 reichen darf, alles darüber wird vom Compiler abgeschnitten oder ignoriert. Der gfortran Compiler nimmt es auch an, wenn zu Beginn der Zeile ein Tabulator-Zeichen steht - dann geht der Compiler davon aus, dass dann Code folgt.

Kommentare

Kommentare können verschiedenen angekündigt werden, eine Möglichkeit ist in Spalte 1 ein 'c' zu schreiben, bspw. so:

	PROGRAM HELLO_WORLD
c	    todo: Ausgabe Hello World
	END

Außerdem ist in der ersten Spalte ein Stern möglich um Kommentare darzustellen:

	PROGRAM HELLO_WORLD
*	    todo: Ausgabe Hello World
	END

In einer beliebigen Spalte kann ein '!' (Aufforderungszeichen) stehen, um alles, was danach kommt als Kommentar zu markieren, bspw:

	PROGRAM HELLO_WORLD
		write (*,*) "Hello World" ! Ausgabe Hello World
	END

Programmeinheiten

Programmcode ohne Kopfzeile wird als Hauptprogramm interpretiert.

	write (*,*) "Hello World"
	end

Es ist aber auch möglich die folgende Kopfzeile für den Code zu vergeben:

	PROGRAM <name>
c	...
	END

Achten Sie darauf, dass kein zusätzliches END in Ihrem Quellcode steht, weil das als weiteres Hauptprogramm angenommen wird, bspw:

	PROGRAM <name>
c	...
	END
	END

Der Teil zwischen den beiden END-Schlüsselworten wird als neues Hauptprogramm gewertet und der Compiler bricht den Übersetzungsvorgang ab.

Besonderheiten

Fortran-Compiler löschen vor dem eigentlichen Übersetzungsvorgang jedes Leerzeichen aus dem Quellcode heraus, der Code ist so übersetzbar, dh. alle Leerzeichen im Quellcode werden ignoriert. Außerdem wird nicht zwischen Groß- und Kleinschreibung unterschieden, folgende beiden Codestücke sind also für den Compiler identisch (ausgenommen sind Zeichenketten):

	program <name>
		write (*,*) "Hello World"
	end
	PROGRAM <name>
		write (*,*) "Hello World"
	END