Fortran: Anhang A
<< zur Fortran-Startseite | |
< Cray Pointer | Anhang B: Anwendungsbeispiele > |
Nachfolgend werden einige grundlegende Sprachelemente von Fortran95 und C tabellarisch gegenübergestellt. Die Gegenüberstellung erfolgt nur schematisch, da hier nur ein Überblick über die Gemeinsamkeiten und Unterschiede der beiden Programmiersprachen aufgezeigt werden soll.
Tabellenlegende:
- ----- : nicht vorhanden
- ... : nicht näher bestimmt, aber irgendwas Sinnvolles und Zulässiges
- kursiv Geschriebenes steht für beliebige (aber natürlich nur sinnvolle und zulässige) Variablennamen, Zahlen, etc.
Programmgrundstruktur Bearbeiten
Groß-, Kleinschreibung Bearbeiten
Fortran95 | C |
---|---|
Fortran ist case-insensitiv | C ist case-sensitiv |
Kommentare Bearbeiten
Fortran95 | C |
---|---|
! xyz |
/* xyz */ |
Das Ende einer Anweisung Bearbeiten
Fortran95 | C |
---|---|
|
|
Hauptprogramm Bearbeiten
Fortran95 | C |
---|---|
program bsp ... end program bsp |
int main(int argc, char **argv) { ... } |
Unterprogramme Bearbeiten
Fortran95 | C |
---|---|
call sub1(...) ... subroutine sub1(...) ... end subroutine sub1 |
void sub1(...); ... sub1(...); ... void sub1(...) { ... } |
var = fun1(...) ... function fun1(...) datentyp :: fun1 ... fun1 = ... end function fun1 |
datentyp fun1(...); ... var = fun1(...); ... datentyp fun1(...) { ... return ...; } |
|
|
Einfache Datentypen Bearbeiten
Fortran95 | C | Bytes |
---|---|---|
----- | unsigned-Datentypen | ... |
integer | int | 4 |
integer(kind=1) | signed char | 1 |
integer(kind=2) | short int | 2 |
integer(kind=4) | int | 4 |
integer(kind=8) | long int | 8 |
real | float | 4 |
double precision | double | 8 |
real(kind=4) | float | 4 |
real(kind=8) | double | 8 |
complex | ----- (ab ISO C99 -> complex.h-Bibliothek) | 8 |
logical | ----- (-> int-Zahlen, ab ISO C99 -> stdbool.h-Bibliothek) | 4 |
character | unsigned char | 1 |
character(len=...) | unsigned char[...] | ... |
(Zu beachten ist, dass die Byteanzahl der Datentypen teilweise maschinenabhängig ist. Die kind-Angaben sind zudem auch compilerabhängig.)
Variablendeklaration Bearbeiten
Fortran95 | C |
---|---|
datentyp :: var1, var2, ... | datentyp var1, var2, ... |
Konstanten Bearbeiten
Fortran95 | C |
---|---|
'Hallo' oder "Hallo" | "Hallo" |
'A', "A" | Character: 'A', Zeichenkette: "A" |
Arithmetische Konstanten höherer Genauigkeit sind zwingend mit einer speziellen Datentypendung zu versehen | ----- |
Benannte Konstanten Bearbeiten
Fortran95 | C |
---|---|
datentyp, parameter :: konstante = wert | const datentyp konstante = wert oder #define konstante wert |
Operatoren Bearbeiten
Arithmetische Operatoren Bearbeiten
Fortran95 | C |
---|---|
+ | + |
- | - |
* | * |
/ | / |
** | ----- (-> Bibliotheksfunktion) |
---- (-> intrinsic functions) | % (Modulo) |
Vergleichsoperatoren Bearbeiten
Fortran95 | C |
---|---|
== | == |
< | < |
<= | <= |
> | > |
>= | >= |
/= | != |
Logische Operatoren Bearbeiten
Fortran95 | C |
---|---|
.AND. | && |
.OR. | || |
.NOT. | ! |
.EQV. | ----- |
.NEQV. | ----- |
Stringverknüpfung Bearbeiten
Fortran95 | C |
---|---|
// | ----- (-> Bibliotheksfunktion) |
Bitoperatoren Bearbeiten
Fortran95 | C |
---|---|
----- (-> intrinsic functions) | <<, >>, &, |, ^, ~ |
Weitere Operatoren Bearbeiten
Fortran95 | C |
---|---|
----- | ++, --, +=, -=, etc. |
Zusammengesetzte Datentypen Bearbeiten
Fortran95 | C |
---|---|
type :: name sequence integer :: a ... end type name ... type(name) :: var var%a = wert |
struct name { int a; ... }; ... struct name var; var.a = wert; |
Felder Bearbeiten
Fortran95 | C |
---|---|
datentyp, dimension(zahl) :: var | datentyp var[zahl] |
datentyp, dimension(zahl1, zahl2, ...) :: var; | datentyp var[zahl1][zahl2]...; |
|
|
var(zahl) = wert |
var[zahl] = wert; |
var(zahl1, zahl2) = wert |
var[zahl1][zahl2] = wert; |
var = wert |
----- (-> mittels Schleifendurchlauf über das ganze Feld) |
var(zahl1:zahl2) = wert |
----- (-> mittels Schleifendurchlauf über die Feldteilmenge) |
Zeichenketten Bearbeiten
Fortran95 | C |
---|---|
character(len=zahl) :: var |
char var[zahl] |
----- | Zeichenketten werden (intern) mit einem \0-Zeichen terminiert. Dies muss bei der Variablendeklaration hinsichtlich der Feldlänge berücksichtigt werden. |
Blöcke, Verzweigungen, Schleifen Bearbeiten
Block Bearbeiten
Fortran95 | C |
---|---|
... |
{ ... } |
Verzweigungen Bearbeiten
Fortran95 | C |
---|---|
if (bedingung) anweisung |
if (bedingung) anweisung; |
if (bedingung) then ... end if |
if (bedingung) { ... } |
if (bedingung) then ... else ... end if |
if (bedingung) { ... } else { ... } |
----- |
... ? ... : ... |
select case (...) case (...) ... case (...) ... ... case default ... end select |
switch (...) { case ...: ... break; case ...: ... break; ... default: ... } |
Schleifen Bearbeiten
Fortran95 | C |
---|---|
do schleifenvar = anfangswert, endwert, schrittweite ... end do |
for (anfangsbedingung; endbedingung; durchgangsanweisung) { ... } |
do while (...) ... end do |
while (...) { ... } |
do ... if (...) exit end do |
do { ... } while (...); |
Sonstiges Bearbeiten
Fortran95 | C |
---|---|
stop |
#include <stdlib.h> exit(status); oder im Hauptprogramm return; |
exit |
break; |
cycle |
continue; |
Ein-, Ausgabe Bearbeiten
Fortran95 | C |
---|---|
write(*, format) ... |
#include <stdio.h> printf(...); |
read(*, format) ... |
#include <stdio.h> scanf(...); |
Dateien Bearbeiten
Fortran95 | C |
---|---|
open (unit=nr, ...) write (nr, format) ... read (nr, format) ... ... close(unit=nr) |
#include <stdio.h> ... FILE *f = fopen(...); fprintf (f, ...); fscanf(f, ...); ... fclose(f); |
Zeiger Bearbeiten
Fortran95 | C |
---|---|
datentyp, pointer :: var |
datentyp *var; |
... datentyp, pointer :: var1 => null(); datentyp, target :: var2 = wert; ... var1 => var2 write(*,*) var1 |
... datentyp *var1 = 0; datentyp var2 = wert; ... var1 = &var2; printf("%d", *var1); |
<< zur Fortran-Startseite | |
< Cray Pointer | Anhang B: Anwendungsbeispiele > |