C Präprozessor und Makros

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 #includePräprozessor wird verwendet, um Header-Dateien in C-Programme aufzunehmen. Beispielsweise,

 #include 

Hier stdio.hist eine Header-Datei. Die #includePräprozessor-Direktive ersetzt die obige Zeile durch den Inhalt der stdio.hHeader-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 #definePrä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 ifAussage mit einem großen Unterschied.

Die ifAnweisung 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, #elseund #elseifsind 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 #elseDirektive kann mit der #ifDirektive verwendet werden.

 #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif 

Sie können Ihrer #if… #elseVerwendung 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

Interessante Beiträge...