| << 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
Groß-, Kleinschreibung
| Fortran95 | C |
|---|---|
| Fortran ist case-insensitiv | C ist case-sensitiv |
Kommentare
| Fortran95 | C |
|---|---|
! xyz |
/* xyz */ |
Das Ende einer Anweisung
| Fortran95 | C |
|---|---|
|
|
Hauptprogramm
| Fortran95 | C |
|---|---|
program bsp ... end program bsp |
int main(int argc, char **argv) {
...
} |
Unterprogramme
| 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
| 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
| Fortran95 | C |
|---|---|
| datentyp :: var1, var2, ... | datentyp var1, var2, ... |
Konstanten
| 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
| Fortran95 | C |
|---|---|
| datentyp, parameter :: konstante = wert | const datentyp konstante = wert oder #define konstante wert |
Operatoren
Arithmetische Operatoren
| Fortran95 | C |
|---|---|
| + | + |
| - | - |
| * | * |
| / | / |
| ** | ----- (-> Bibliotheksfunktion) |
| ---- (-> intrinsic functions) | % (Modulo) |
Vergleichsoperatoren
| Fortran95 | C |
|---|---|
| == | == |
| < | < |
| <= | <= |
| > | > |
| >= | >= |
| /= | != |
Logische Operatoren
| Fortran95 | C |
|---|---|
| .AND. | && |
| .OR. | || |
| .NOT. | ! |
| .EQV. | ----- |
| .NEQV. | ----- |
Stringverknüpfung
| Fortran95 | C |
|---|---|
| // | ----- (-> Bibliotheksfunktion) |
Bitoperatoren
| Fortran95 | C |
|---|---|
| ----- (-> intrinsic functions) | <<, >>, &, |, ^, ~ |
Weitere Operatoren
| Fortran95 | C |
|---|---|
| ----- | ++, --, +=, -=, etc. |
Zusammengesetzte Datentypen
| 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
| 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
| 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
Block
| Fortran95 | C |
|---|---|
... |
{
...
} |
Verzweigungen
| 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
| 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
| Fortran95 | C |
|---|---|
stop |
#include <stdlib.h> exit(status); oder im Hauptprogramm return; |
exit |
break; |
cycle |
continue; |
Ein-, Ausgabe
| Fortran95 | C |
|---|---|
write(*, format) ... |
#include <stdio.h> printf(...); |
read(*, format) ... |
#include <stdio.h> scanf(...); |
Dateien
| 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
| 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 > |
This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.