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

Der #includePrä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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.