In diesem Tutorial werden Sie in c Präprozessoren eingeführt und lernen anhand von Beispielen, wie Sie #include, #define und die bedingte Kompilierung verwenden.
Der C-Präprozessor ist ein Makro-Präprozessor (mit dem Sie Makros definieren können), der Ihr Programm transformiert, bevor es kompiliert wird. Diese Transformationen können die Aufnahme von Header-Dateien, Makro-Erweiterungen usw. sein.
Alle Vorverarbeitungsanweisungen beginnen mit einem #
Symbol. Beispielsweise,
#define PI 3.14
Einige der häufigsten Verwendungen von C-Präprozessoren sind:
Einschließlich Header-Dateien: #include
Der #include
Präprozessor wird verwendet, um Header-Dateien in C-Programme aufzunehmen. Beispielsweise,
#include
Hier stdio.h
ist eine Header-Datei. Die #include
Präprozessor-Direktive ersetzt die obige Zeile durch den Inhalt der stdio.h
Header-Datei.
Dies ist der Grund, warum Sie verwenden müssen, #include
bevor Sie Funktionen wie scanf()
und verwenden können printf()
.
Mit dieser Präprozessor-Direktive können Sie auch eine eigene Header-Datei mit Funktionsdeklaration erstellen und in Ihr Programm aufnehmen.
#include "my_header.h"
Besuchen Sie diese Seite, um mehr über die Verwendung von Header-Dateien zu erfahren.
Makros mit #define
Ein Makro ist ein Codefragment, dem ein Name gegeben wird. Sie können ein Makro in C mithilfe der #define
Präprozessor-Direktive definieren.
Hier ist ein Beispiel.
#define c 299792458 // speed of light
Wenn wir hier c in unserem Programm verwenden, wird es durch ersetzt 299792458
.
Beispiel 1: # Präprozessor definieren
#include #define PI 3.1415 int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0; )
Funktioniert wie Makros
Sie können auch Makros definieren, die ähnlich wie ein Funktionsaufruf funktionieren. Dies wird als funktionsähnliche Makros bezeichnet. Beispielsweise,
#define circleArea(r) (3.1415*(r)*(r))
Jedes Mal, wenn das Programm auf etwas trifft circleArea(argument)
, wird es durch ersetzt (3.1415*(argument)*(argument))
.
Angenommen, wir haben 5 als Argument übergeben, es wird wie folgt erweitert:
circleArea(5) expands to (3.1415*5*5)
Beispiel 2: Verwenden des Präprozessors #define
#include #define PI 3.1415 #define circleArea(r) (PI*r*r) int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0; )
Besuchen Sie diese Seite, um mehr über Makros und den Präprozessor #define zu erfahren.
Bedingte Kompilierung
In der C-Programmierung können Sie den Präprozessor anweisen, ob ein Codeblock eingefügt werden soll oder nicht. Dazu können bedingte Anweisungen verwendet werden.
Es ähnelt einer if
Aussage mit einem großen Unterschied.
Die if
Anweisung wird während der Ausführungszeit getestet, um zu prüfen, ob ein Codeblock ausgeführt werden soll oder nicht, während die Bedingungen verwendet werden, um einen Codeblock vor der Ausführung in Ihr Programm aufzunehmen (oder zu überspringen).
Verwendung von Bedingten
- Verwenden Sie je nach Maschine und Betriebssystem unterschiedliche Codes
- Kompilieren Sie dieselbe Quelldatei in zwei verschiedenen Programmen
- bestimmten Code aus dem Programm auszuschließen, ihn aber als Referenz für zukünftige Zwecke aufzubewahren
Wie verwende ich bedingt?
Zur Nutzung bedingt, #ifdef
, #if
, #defined
, #else
und #elseif
sind Richtlinien verwendet.
# ifdef Direktive
#ifdef MACRO // conditional codes #endif
Hier sind die Bedingungscodes nur dann im Programm enthalten, wenn MACRO definiert ist.
#if, #elif und #else Direktive
#if expression // conditional codes #endif
Hier ist Ausdruck ein Ausdruck vom Typ Ganzzahl (kann Ganzzahlen, Zeichen, arithmetischer Ausdruck, Makros usw. sein).
Die Bedingungscodes sind nur dann im Programm enthalten, wenn der Ausdruck mit einem Wert ungleich Null ausgewertet wird.
Die optionale #else
Direktive kann mit der #if
Direktive verwendet werden.
#if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif
Sie können Ihrer #if… #else
Verwendung auch verschachtelte Bedingungen hinzufügen#elif
#if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif
#definiert
Mit dem speziellen Operator #defined wird getestet, ob ein bestimmtes Makro definiert ist oder nicht. Es wird oft mit der Direktive #if verwendet.
#if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes
Vordefinierte Makros
Hier sind einige vordefinierte Makros in der C-Programmierung.
Makro | Wert |
---|---|
__DATE__ | Eine Zeichenfolge, die das aktuelle Datum enthält |
__FILE__ | Eine Zeichenfolge, die den Dateinamen enthält |
__LINE__ | Eine Ganzzahl, die die aktuelle Zeilennummer darstellt |
__STDC__ | Wenn ANSI-Standard C folgt, ist der Wert eine Ganzzahl ungleich Null |
__TIME__ | Eine Zeichenfolge, die das aktuelle Datum enthält. |
Beispiel 3: Aktuelle Zeit mit __TIME__ abrufen
Das folgende Programm gibt die aktuelle Zeit mit einem __TIME__
Makro aus.
#include int main() ( printf("Current time: %s",__TIME__); )
Ausgabe
Aktuelle Zeit: 19:54:39
Empfohlene Lektüre
- Leitungssteuerung
- Pragmas
- Präprozessorausgabe
- Andere Richtlinien