preprocessor directives c
Ein detaillierter Blick auf Präprozessor-Direktiven in C ++.
Der Präprozessor ist eine einzigartige Funktion von C ++. In C ++ haben wir Schritte wie Kompilieren, Verknüpfen und Ausführen für ein typisches Programm. In Wirklichkeit haben wir viele andere Funktionen in einem C ++ - Programm, die verarbeitet werden müssen, bevor das Programm zur Kompilierung übergeben wird.
Zu diesem Zweck wird ein spezieller Schritt ausgeführt, der als Vorverarbeitung bezeichnet wird. Die Vorverarbeitung erfolgt vor dem Kompilierungsprozess und die Besonderheiten werden vorverarbeitet. Als Ergebnis wird ein erweitertes C ++ - Programm erhalten und dann an den Compiler übergeben.
=> Besuchen Sie hier, um C ++ von Grund auf neu zu lernen.
Was du lernen wirst:
- Überblick
- Richtlinien zum Einfügen von Dateien
- Makrodefinitionsrichtlinien
- Richtlinien zur bedingten Kompilierung
- Die # & ## Operatoren
- Andere Richtlinien
- Vordefinierte Makros
- Fazit
- Literatur-Empfehlungen
Überblick
Die Besonderheiten für die Vorverarbeitung werden anhand einer Entität namens 'Präprozessor-Direktive' identifiziert. Diese Präprozessoranweisungen teilen dem Compiler mit, dass bestimmte Informationen im C ++ - Programm, die mit Präprozessoranweisungen gekennzeichnet sind, vor der Kompilierung vorverarbeitet werden müssen.
Beachten Sie, dass in C ++ alle Präprozessoranweisungen mit einem # -Symbol beginnen. In dem Moment, in dem der Präprozessor (Teil des Compilers) auf das Symbol # trifft, werden die Informationen nach dem Symbol # vorverarbeitet, bevor das Programm an den Compiler übergeben wird.
Im Gegensatz zu den anderen C ++ - Anweisungen enden Präprozessoranweisungen nicht mit einem Semikolon.
In diesem Tutorial werden wir die verschiedenen Präprozessor-Direktiven untersuchen, die von C ++ unterstützt werden.
Richtlinien zum Einfügen von Dateien
#einschließen
Mit der Dateieinschlussrichtlinie #include können wir andere Dateien in unser Quellprogramm aufnehmen. Mit diesen Funktionen können wir jede Header-Datei, die Definitionen verschiedener vordefinierter Funktionen enthält, in unser Programm aufnehmen. Wir können Header-Dateien mit der folgenden Syntax in unser Programm aufnehmen.
#include
Beispiel: #einschließen
Wir haben dies bereits in unseren C ++ - Programmen gesehen. Der Header-Iostream enthält die Funktionen, die für das Streaming von Eingabe- / Ausgabedaten wie cout, cin usw. erforderlich sind.
Wenn unsere Programme größer werden oder die Funktionalität komplex wird, möchten wir unser Programm möglicherweise in verschiedene Dateien aufteilen oder Funktionen aus den anderen Dateien importieren. In diesem Fall verwenden wir benutzerdefinierte Dateien. Um benutzerdefinierte Dateien in unser Programm aufzunehmen, können wir die folgende Syntax der Direktive #include verwenden.
#include “filename”
Beispiel: #include 'vector_int.h'
Dies ist eine benutzerdefinierte Header-Datei, die wir in unser Programm aufnehmen möchten, um deren Funktionalität zu nutzen.
Das folgende Codebeispiel zeigt die Verwendung der Direktive #include.
Spionage-App für iPhone und Android
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
Ausgabe:
Dies ist ein Beispiel, das die Einschlussrichtlinie #include demonstriert.
Wie gezeigt, haben wir die Direktive #include verwendet, um die Funktionalität des Headers in unser Programm aufzunehmen.
Makrodefinitionsrichtlinien
#definieren
Die Direktive #define wird verwendet, um die symbolischen Konstanten oder Makros im C ++ - Programm zu definieren.
Die allgemeine Form einer # define-Direktive lautet:
#define macro_name replacement code
Wenn ein Präprozessor auf das Makro im Programm stößt, ersetzt der Präprozessor dieses Makro durch den Code, der mit der Direktive #define definiert wurde, bevor der Code an den Compiler übergeben wird.
Das folgende Codebeispiel zeigt eine symbolische Konstante RADIUS, die mit der Direktive #define und ihrer Verwendung im Programm definiert wird.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
Ausgabe:
Kreisfläche: 78,55
Wie im Programm gezeigt, können wir in unserem Code die symbolische Konstante RADIUS verwenden, die durch den mit der Direktive #define dafür definierten Wert ersetzt wird.
Eine Open-Source-Datenbank ist:
Wir können die Direktive #define verwenden, um einen geeigneten Funktionscode zu definieren. Diese Funktionen sind normalerweise kleine Funktionen.
Ein Beispiel ist unten gezeigt.
#include #define REC_AREA(length, breadth) (length * breadth) using namespace std; int main() { int length = 20, breadth = 5, area; area = REC_AREA(length, breadth); cout << 'Area of a rectangle is: ' << area; return 0; }
Ausgabe:
Die Fläche eines Rechtecks beträgt: 100
Hier haben wir unter Verwendung der Direktive #define eine Funktion REC_AREA definiert, die zwei Argumente verwendet, d. H. Länge und Breite, und die Fläche eines Rechtecks berechnet. In der Hauptfunktion verwenden wir nur dieses Makro und geben ihm zwei Argumente, um die Fläche eines Rechtecks zu erhalten.
#undef
Makros in einem Programm, das mit der Direktive #define definiert wurde, bleiben so lange bestehen, bis sie mit der Direktive #undef nicht mehr definiert sind. Sobald das Programm auf #undef stößt, führt die nachfolgende Verwendung eines Makros (undefiniert durch #undef) zu einem Kompilierungsfehler.
Wenn wir im obigen Programm nur eine Anweisung #undef REC_AREA nach den Integer-Deklarationen angeben, gibt das Programm einen Kompilierungsfehler aus.
Richtlinien zur bedingten Kompilierung
Neben den oben erläuterten Anweisungen bietet C ++ auch die folgenden Anweisungen, die für die bedingte Kompilierung von Code verwendet werden können. Diese Anweisungen können in ähnlichen Zeilen der if-else-Anweisung von C ++ verwendet werden.
Zum Beispiel, Mit diesen bedingten Anweisungen können wir DEBUG für ein Programm ein- oder ausschalten.
Einige der in C ++ bereitgestellten Anweisungen zur bedingten Kompilierung umfassen:
- #wenn
- #elif
- #endif
- #ifdef
- #ifndef
- #sonst
Das folgende Programm demonstriert die Verwendung von Anweisungen zur bedingten Kompilierung in einem C ++ - Programm.
#include using namespace std; #define DEBUG #define MAX(a,b) (((a)>(b)) ? a : b) int main () { int i, j; i = 100; j = 50; #ifdef DEBUG cout <<'Trace: Start of main function' << endl; #endif cout <<'The maximum is ' << MAX(i, j) << endl; #undef MAX //cout <<'The maximum is ' << MAX(10,20) << endl; #ifdef DEBUG cout <<'Trace: End of main function' << endl; #endif return 0; }
Ausgabe:
Trace: Start der Hauptfunktion
Das Maximum ist 100
Trace: Ende der Hauptfunktion
Im obigen Programm verwenden wir die Direktive #ifdef - #endif, um einen DEBUG für das Programm zu definieren. Dann haben wir die Makrofunktion MAX mit der Direktive #undef undefiniert. Die Konstrukte der bedingten Kompilierungsanweisung #ifdef - #endif prüfen, ob DEBUG gesetzt ist, und drucken, wenn es gesetzt ist, nur wenige Nachrichten im Programm.
Die # & ## Operatoren
Die Operatoren # und ## sind zwei spezielle Operatoren, mit denen jeweils ein Text-Token in eine anzuzeigende Zeichenfolge konvertiert und zwei Token verkettet werden.
Nachfolgend finden Sie ein Beispiel, das diese beiden Operatoren demonstriert.
#include using namespace std; #define MKSTR( x ) #x #define concat(a, b) a ## b int main () { cout <<'MKSTR(Hello World) = '<< MKSTR(Hello World) << endl; int xy = 100; cout <<'concat(x,y) = '< Ausgabe:
MKSTR (Hallo Welt) = Hallo Welt
concat (x, y) = 100
Im obigen Programm definieren wir MKSTR mit einem Argument x. Es hat Körper #x. Wenn wir diesen MKSTR mit dem Argument 'Hello World' drucken, sehen wir, dass aufgrund von #x das Argument in eine Zeichenfolge konvertiert und in der Ausgabe angezeigt wird.
Als nächstes haben wir eine Concat-Funktion mit zwei Argumenten a und b definiert. Im Körper geben wir a ## b an. Ausdruck a ## b ist gleich ab. Wenn wir also in der Hauptfunktion concat (x, y) aufrufen, wird tatsächlich xy ausgewertet, was der von uns definierten Ganzzahlvariablen entspricht.
Andere Richtlinien
#Error
Die allgemeine Syntax der Direktive #error lautet:
#error error_message
Wenn der Compiler auf die Direktive #error stößt, wird die Fehlermeldung angezeigt und die Kompilierung wird gestoppt. Das Argument error_message kann ein oder mehrere Wörter mit oder ohne Anführungszeichen enthalten.
#Linie
Dies weist den Compiler an, die intern gespeicherte Zeilennummer und den Dateinamen des Compilers in die angegebene Zeilennummer und den Dateinamen zu ändern.
#Linie Ziffernfolge ('Dateiname')
Die digit_sequence kann eine ganzzahlige Konstante sein.
die beste Handy-Spionage-Software
Beispiel:#line 200 test.c
Im obigen Beispiel wird die intern gespeicherte Zeilennummer auf 200 gesetzt und der Dateiname in test.c.
#pragma
Liefert dem Compiler implementierungsdefinierte Anweisungen. Diese Anweisungen gelten speziell für den Compiler und die Plattform. Wenn die Anweisung nicht übereinstimmt, wird die Anweisung ignoriert, ohne dass ein Syntaxfehler generiert wird.
Vordefinierte Makros
C ++ definiert auch zahlreiche vordefinierte Makros, die von den Programmierern verwendet werden können.
Einige dieser Makros sind unten tabellarisch aufgeführt.
Vordefiniertes Makro Beschreibung __DATEI__ Der aktuelle Dateiname des zu kompilierenden Programms __DATUM__ Datum der Übersetzung des Quellcodes in Objektcode im Format Monat / Tag / Jahr __ZEIT__ Zeit in der Form Stunde: Minute: Sekunde, zu der das Programm kompiliert wird __LINIE__ Die aktuelle Zeilennummer des Programms, das kompiliert wird __cplusplus Ganzzahlkonstante, die für jede Compilerversion definiert ist
Das folgende Programm demonstriert diese Makros in einem Programm.
#include using namespace std; int main () { cout<<'__LINE__ :' << __LINE__ << endl; cout<<'__FILE__ :' << __FILE__ << endl; cout<<'__DATE__ :' << __DATE__ << endl; cout<<'__TIME__ :' << __TIME__ << endl; cout<<'__cplusplus:'<<__cplusplus< Ausgabe:
__LINE__: 5
__FILE__: prog.cpp
__DATE__: 15. April 2019
__TIME__: 12: 09: 15
__cplusplus:201402
Die obige Programmausgabe entspricht der Erläuterung der oben definierten vordefinierten Makros und ist selbsterklärend.
Fazit
In diesem Tutorial haben wir verschiedene Präprozessor-Direktiven von C ++ zusammen mit ihren Beispielen gesehen. Präprozessor-Direktiven helfen uns, effizientere und lesbarere Programme zu schreiben.
Die Anweisungen zur bedingten Kompilierung ermöglichen es uns auch, unsere Programmausgabe auf verschiedene Arten zu verzweigen.
=> Suchen Sie hier nach der gesamten C ++ - Schulungsserie.
Literatur-Empfehlungen
- Software-Test-Hilfe-Partnerprogramm!
- Schreiben und verdienen - Programm für erfahrene QS-Tester
- Unix Pipes Tutorial: Pipes in der Unix-Programmierung
- Bibliotheksfunktionen in C ++
- Über 70 BEST C ++ - Tutorials zum kostenlosen Erlernen der C ++ - Programmierung
- Befehlszeilenargumente in C ++
- Iteratoren in STL
- Initialisierungslisten in C ++