C Präprozessor und Makros
C-Präprozessor und Makros
In diesem Tutorial werden Sie in C-Präprozessoren eingeführt und lernen anhand von Beispielen die Verwendung von #include, #define und der bedingten Kompilierung.
Der C-Präprozessor ist ein Makro-Präprozessor (ermöglicht Ihnen, Makros zu definieren), der Ihr Programm transformiert, bevor es kompiliert wird. Diese Transformationen können das Einbinden von Header-Dateien, Makroerweiterungen usw. sein.
Alle Vorverarbeitungsanweisungen beginnen mit einem #
Symbol. Zum Beispiel
#define PI 3.14
Einige der häufigsten Anwendungen des C-Präprozessors sind:
Header-Dateien einbinden:#include
Die #include
Präprozessor wird verwendet, um Header-Dateien in C-Programme einzufügen. Zum Beispiel
#include <stdio.h>
Hier, stdio.h
ist eine Header-Datei. Die #include
Die Präprozessordirektive ersetzt die obige Zeile durch den Inhalt von stdio.h
Header-Datei.
Aus diesem Grund müssen Sie #include <stdio.h>
verwenden bevor Sie Funktionen wie scanf()
verwenden können und printf()
.
Sie können auch Ihre eigene Header-Datei erstellen, die die Funktionsdeklaration enthält, und sie mit dieser Präprozessordirektive 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 dem #define
definieren Präprozessordirektive.
Hier ist ein Beispiel.
#define c 299792458 // speed of light
Hier, wenn wir c verwenden in unserem Programm wird es durch 299792458
ersetzt .
Beispiel 1:#define Präprozessor
#include <stdio.h>
#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;
}
Funktion wie 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)
stößt , wird durch (3.1415*(argument)*(argument))
ersetzt .
Angenommen, wir haben 5 als Argument übergeben, dann wird es wie folgt erweitert:
circleArea(5) expands to (3.1415*5*5)
Beispiel 2:Verwendung des Präprozessors #define
#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
Bei der C-Programmierung können Sie den Präprozessor anweisen, ob er einen Codeblock einfügen soll oder nicht. Dazu können bedingte Direktiven verwendet werden.
Es ähnelt einem if
Aussage mit einem großen Unterschied.
Die if
Die 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 Konditional
- je nach Maschine und Betriebssystem unterschiedlichen Code verwenden
- gleiche Quelldatei in zwei verschiedenen Programmen kompilieren
- um bestimmten Code aus dem Programm auszuschließen, ihn aber als Referenz für zukünftige Zwecke aufzubewahren
Wie benutzt man Bedingung?
Um Bedingung zu verwenden, #ifdef
, #if
, #defined
, #else
und #elif
Direktiven verwendet werden.
#ifdef-Richtlinie
#ifdef MACRO
// conditional codes
#endif
Hier werden die Bedingungscodes nur dann in das Programm aufgenommen, wenn MACRO ist definiert.
#if-, #elif- und #else-Direktive
#if expression
// conditional codes
#endif
Hier Ausdruck ist ein ganzzahliger Ausdruck (kann ganze Zahlen, Zeichen, arithmetische Ausdrücke, Makros usw. sein).
Die Bedingungscodes werden nur dann in das Programm aufgenommen, wenn der Ausdruck wird auf einen Wert ungleich Null ausgewertet.
Der optionale #else
Direktive kann mit #if
verwendet werden Richtlinie.
#if expression
conditional codes if expression is non-zero
#else
conditional if expression is 0
#endif
Sie können Ihrem #if...#else
auch eine verschachtelte Bedingung hinzufügen 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
#definiert
Der spezielle Operator #defined wird verwendet, um zu testen, ob ein bestimmtes Makro definiert ist oder nicht. Es wird oft mit #if verwendet Richtlinie.
#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__ | Ein String, der den Dateinamen enthält |
__LINE__ | Eine ganze Zahl, die die aktuelle Zeilennummer darstellt |
__STDC__ | Wenn dem ANSI-Standard C gefolgt wird, dann ist der Wert eine Ganzzahl ungleich Null |
__TIME__ | Ein String, der das aktuelle Datum enthält. |
Beispiel 3:Aktuelle Uhrzeit mit __TIME__ abrufen
Das folgende Programm gibt die aktuelle Uhrzeit mit __TIME__
aus Makro.
#include <stdio.h>
int main()
{
printf("Current time: %s",__TIME__);
}
Ausgabe
Current time: 19:54:39
Empfohlene Lektüre
- Leitungssteuerung
- Pragmen
- Präprozessorausgabe
- Andere Richtlinien
C Sprache