|
|
||
|
|
||
| .. Beispiel: Satz von Pythagoras (mit bedingter Compilierung) | ||
|
|
||
| Aufgabe: Diese Version des Programms 'Satz von Pythagoras' wurde so vorbereitet, dass sie durch eine einfache Änderung im Quelltext sowohl für DOS-Rechner als auch für IPC@CHIP-Rechner compiliert werden kann. Die jeweils unterschiedlichen Programmteile werden durch eine bedingte Compilation in das Maschinenprogramm übernommen, oder eben nicht. Das Geheimnis hierzu sind die Präprozesordirektiven #ifdef, #ifndef, #endif und #define. Das folgende Beispiel zeigt, wie sie zur bedingten Compilation eingesetzt werden können. |
|
|
|
|
|
|
|
|
// pythagoras.cpp // -------------- Version 20.11.2007 // Model: small // Fliesskommaemulation ein (beim IPC@CHIP) // Schwarzer, www.GoBlack.de // Funktion zur Berechnung der Hypotenusenlänge nach dem Satz von // Pythagoras // Wählen Sie für welchen Rechner DOS oder IPC@CHIP die // Compilation durchgeführt werden soll. Setzen Sie .. // #define DOS .. für DOS-Rechner, und // #define IPC .. für IPC@CHIP-Rechner #define DOS // Compilation für DOS-Rechner // Einbinden von Headerdateien mit Bibliotheksfunktionen #include <conio.h> // für getch() wenn benötigt #include <stdio.h> // für printf() #include <math.h> // für sqrt() // Einbinden einer eigenen Headerdatei, die sich im gleichen // Verzeichnis wie der Quelltext befindet. Zwischen den // Gänsefüsschen muss eine Pfadangabe stehen, wenn sich die Datei // nicht im gleichen Verzeichnis wie der Quelltext befindet. |
||
|
|
|
|
|
|
Die Ausgabeabfolge des obigen Beispiels sieht wie folgt aus: Kathete1= _ Eingabe max. 10 Zeichen Kathete2= _ Eingabe max. 10 Zeichen Hypotenuse = Ergebnis |
|
|
Bemerkungen
Der
IPC@CHIP-Rechner und PC-Computer unterscheiden sich bezüglich
ihres Betriebssystems voneinander. Das obige Programm hält
Programmteile vor, die für die Lauffähigkeit des
Programms auf dem einen bzw. dem anderen Rechnern benötigt
werden.
So ist
es bei PCs sinnvoll, das DOS-Fenster am Ende des Programms durch
eine Tastaturabfrage über getch() geöffnet zu halten,
was bei IPC@CHIP -Rechnern nicht notwendig ist.
Die
IPC@CHIP -Rechner dagegen sind multitaskfähig und würden
Eingaben an ihr Betriebssystem und nicht an das Benutzerprogramm
richten, wenn ihr Eingabestrom nicht durch setStdio() auf das
Benutzerprogramm umgesschaltet würde.
Durch die Präprozessordirektive #define kann im Kopf des Programms die Definition der Literale DOS oder IPC vorgenommen werden. Diese Definition kann folgend durch #ifdef abgefragt werden. Ist nun das Literal DOS definiert, betrachtet der Compiler alles was zwischen #ifdef IPC bis #endif steht nicht, und übersetzt weder die Funktion setStdio(), noch deren Aufrufe. Nur bei #ifdef DOS verhält er sich anders. Das Literal DOS wurde ja definiert und der Compiler sieht die Zeile getch(). So übersetzt er sie und das Programm ist in DOS-Fenstern lauffähig. Wurde IPC definiert drehen sich die Verhältnisse um. Nun wird getch() nicht gesehen, dafür aber alle Programmteile die zur Lauffähigkeit auf dem IPC beitragen. |
||
|
|
.de