Der C-Präprozessor ist ein Makro-Präprozessor (ermöglicht die Definition von Makros), der Ihr Programm umwandelt, bevor es kompiliert wird. Diese Umwandlungen können die Einbeziehung von Header-Dateien, Makro-Erweiterungen usw. sein.
Alle Präprozessor-Direktiven beginnen mit einem #
-Symbol. Zum Beispiel:
#define PI 3.14
Einige der üblichen Verwendungen des C-Präprozessors sind:
- Einschließen von Header-Dateien: #include
- Makros mit #define
- Beispiel 1: #define preprocessor
- Funktionsähnliche Makros
- Beispiel 2: Verwendung von #define preprocessor
- Bedingte Kompilierung
- Verwendung von Conditional
- Wie verwendet man Conditional?
- #ifdef Direktive
- #if, #elif und #else Direktive
- #defined
- Vordefinierte Makros
- Beispiel 3: Abrufen der aktuellen Zeit mit __TIME__
- Leseempfehlungen
Einschließen von Header-Dateien: #include
Der #include
Präprozessor wird verwendet, um Header-Dateien in C-Programme einzuschließen. Zum Beispiel,
#include <stdio.h>
Hier ist stdio.h
eine Header-Datei. Die Präprozessor-Direktive #include
ersetzt die obige Zeile durch den Inhalt der Header-Datei stdio.h
.
Das ist der Grund, warum Sie #include <stdio.h>
verwenden müssen, bevor Sie Funktionen wie scanf()
und printf()
verwenden können.
Sie können auch Ihre eigene Header-Datei erstellen, die Funktionsdeklarationen enthält, und sie mit dieser Präprozessor-Direktive in Ihr Programm einbinden.
#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 mit der Präprozessor-Direktive #define
definieren.
Hier ist ein Beispiel.
#define c 299792458 // speed of light
Wenn wir c in unserem Programm verwenden, wird es durch 299792458
ersetzt.
Beispiel 1: #define preprocessor
#include <stdio.h>#define PI 3.1415int 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;}
Funktionsähnliche Makros
Sie können auch Makros definieren, die ähnlich wie ein Funktionsaufruf funktionieren. Dies wird als funktionsähnliche Makros bezeichnet. Zum Beispiel:
#define circleArea(r) (3.1415*(r)*(r))
Jedes Mal, wenn das Programm auf circleArea(argument)
trifft, wird es durch (3.1415*(argument)*(argument))
ersetzt.
Angenommen, wir haben 5 als Argument übergeben, dann expandiert es wie folgt:
circleArea(5) expands to (3.1415*5*5)
Beispiel 2: Verwendung von #define preprocessor
#include <stdio.h>#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 #define preprocessor zu erfahren.
Bedingte Kompilierung
In der C-Programmierung können Sie den Präprozessor anweisen, ob er einen Codeblock einschließen soll oder nicht. Die if
-Anweisung wird während der Ausführung getestet, um zu prüfen, ob ein Codeblock ausgeführt werden soll oder nicht, während die bedingten Anweisungen verwendet werden, um einen Codeblock vor der Ausführung in Ihr Programm aufzunehmen (oder zu überspringen).
Verwendung von Conditional
- verschiedenen Code je nach Maschine und Betriebssystem verwenden
- dieselbe Quelldatei in zwei verschiedenen Programmen kompilieren
- bestimmten Code aus dem Programm ausschließen, ihn aber als Referenz für zukünftige Zwecke behalten
Wie verwendet man Conditional?
Um Conditional zu verwenden, werden die Direktiven #ifdef
, #if
, #defined
, #else
und #elseif
verwendet.
#ifdef Direktive
#ifdef MACRO // conditional codes#endif
Hier werden die bedingten Codes nur in das Programm aufgenommen, wenn MACRO definiert ist.
#if, #elif und #else Direktive
#if expression // conditional codes#endif
Hier ist der Ausdruck ein Ausdruck vom Typ Integer (kann Integer, Zeichen, arithmetischer Ausdruck, Makros usw. sein).
Die bedingten Codes werden nur dann in das Programm aufgenommen, wenn der Ausdruck zu einem Wert ungleich Null ausgewertet wird.
Die optionale Direktive #else
kann mit der Direktive #if
verwendet werden.
#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif
Mit #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
#defined
Der spezielle Operator #defined wird verwendet, um zu testen, ob ein bestimmtes Makro definiert ist oder nicht. Er wird oft mit der #if-Direktive verwendet.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Vordefinierte Makros
Hier sind einige vordefinierte Makros in der C-Programmierung.
Makro | Wert |
---|---|
__DATE__ |
Ein String, der das aktuelle Datum enthält |
__FILE__ |
A String, der den Dateinamen enthält |
__LINE__ |
Eine ganze Zahl, die die aktuelle Zeilennummer darstellt |
__STDC__ |
Wenn der ANSI-Standard C, dann ist der Wert eine ganze Zahl ungleich Null |
__TIME__ |
Eine Zeichenkette, die das aktuelle Datum enthält. |
Beispiel 3: Abrufen der aktuellen Zeit mit __TIME__
Das folgende Programm gibt die aktuelle Zeit mit dem Makro __TIME__
aus.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Ausgabe
Current time: 19:54:39
Leseempfehlungen
- Zeilensteuerung
- Pragmen
- Präprozessorausgabe
- Andere Direktiven