Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C - Präprozessoren

Der C-Präprozessor ist kein Teil des Compilers, sondern ein separater Schritt im Kompilierungsprozess. Einfach ausgedrückt ist ein C-Präprozessor nur ein Textersetzungswerkzeug und weist den Compiler an, die erforderliche Vorverarbeitung vor der eigentlichen Kompilierung durchzuführen. Wir bezeichnen den C-Präprozessor als CPP.

Alle Präprozessorbefehle beginnen mit einem Hash-Symbol (#). Es muss das erste Zeichen sein, das kein Leerzeichen ist, und zur besseren Lesbarkeit sollte eine Präprozessordirektive in der ersten Spalte beginnen. Der folgende Abschnitt listet alle wichtigen Präprozessordirektiven auf −

Sr.No. Anweisung &Beschreibung
1

#define

Ersetzt ein Präprozessor-Makro.

2

#einschließen

Fügt einen bestimmten Header aus einer anderen Datei ein.

3

#undef

Definiert ein Präprozessor-Makro.

4

#ifdef

Gibt true zurück, wenn dieses Makro definiert ist.

5

#ifndef

Gibt wahr zurück, wenn dieses Makro nicht definiert ist.

6

#wenn

Testet, ob eine Kompilierzeitbedingung wahr ist.

7

#else

Die Alternative für #if.

8

#elif

#else und #if in einer Anweisung.

9

#endif

Beendet die Bedingung des Präprozessors.

10

#Fehler

Gibt eine Fehlermeldung auf stderr aus.

11

#pragma

Gibt unter Verwendung einer standardisierten Methode spezielle Befehle an den Compiler aus.

Beispiele für Präprozessoren

Analysieren Sie die folgenden Beispiele, um verschiedene Anweisungen zu verstehen.

#define MAX_ARRAY_LENGTH 20

Diese Direktive weist das CPP an, Instanzen von MAX_ARRAY_LENGTH durch 20 zu ersetzen. Verwenden Sie #define für Konstanten, um die Lesbarkeit zu verbessern.

#include <stdio.h>
#include "myheader.h"

Diese Anweisungen weisen das CPP an, stdio.h aus den Systembibliotheken zu beziehen und fügen Sie den Text der aktuellen Quelldatei hinzu. Die nächste Zeile weist CPP an, myheader.h abzurufen aus dem lokalen Verzeichnis und fügen Sie den Inhalt der aktuellen Quelldatei hinzu.

#undef  FILE_SIZE
#define FILE_SIZE 42

Es weist den CPP an, die vorhandene FILE_SIZE aufzuheben und sie als 42 zu definieren.

#ifndef MESSAGE
   #define MESSAGE "You wish!"
#endif

Es teilt dem CPP mit, NACHRICHT nur dann zu definieren, wenn NACHRICHT nicht bereits definiert ist.

#ifdef DEBUG
   /* Your debugging statements here */
#endif

Es teilt dem CPP mit, die eingeschlossenen Anweisungen zu verarbeiten, wenn DEBUG definiert ist. Dies ist nützlich, wenn Sie den -DDEBUG übergeben -Flag an den gcc-Compiler zum Zeitpunkt der Kompilierung. Dadurch wird DEBUG definiert, sodass Sie das Debuggen während der Kompilierung spontan ein- und ausschalten können.

Vordefinierte Makros

ANSI C definiert eine Reihe von Makros. Obwohl jedes zur Verwendung in der Programmierung verfügbar ist, sollten die vordefinierten Makros nicht direkt geändert werden.

Sr.No. Makro &Beschreibung
1

__DATUM__

Das aktuelle Datum als Zeichenliteral im Format "MMM TT JJJJ".

2

__TIME__

Die aktuelle Uhrzeit als Zeichenliteral im Format "HH:MM:SS".

3

__DATEI__

Diese enthält den aktuellen Dateinamen als String-Literal.

4

__LINE__

Diese enthält die aktuelle Zeilennummer als Dezimalkonstante.

5

__STDC__

Als 1 definiert, wenn der Compiler dem ANSI-Standard entspricht.

Versuchen wir das folgende Beispiel −

Live-Demo
#include <stdio.h>

int main() {

   printf("File :%s\n", __FILE__ );
   printf("Date :%s\n", __DATE__ );
   printf("Time :%s\n", __TIME__ );
   printf("Line :%d\n", __LINE__ );
   printf("ANSI :%d\n", __STDC__ );

}

Wenn der obige Code in einer Datei test.c kompiliert und ausgeführt wird, erzeugt es das folgende Ergebnis −

File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1

Präprozessor-Operatoren

Der C-Präprozessor bietet die folgenden Operatoren, um beim Erstellen von Makros zu helfen −

Der Makrofortsetzungsoperator (\)

Ein Makro ist normalerweise auf eine einzelne Zeile beschränkt. Der Makrofortsetzungsoperator (\) wird verwendet, um ein Makro fortzusetzen, das für eine einzelne Zeile zu lang ist. Zum Beispiel −

#define  message_for(a, b)  \
   printf(#a " and " #b ": We love you!\n")

Der Stringize-Operator (#)

Der Zeichenfolgen- oder Nummernzeichenoperator ( '#' ) wandelt bei Verwendung innerhalb einer Makrodefinition einen Makroparameter in eine Zeichenfolgenkonstante um. Dieser Operator darf nur in einem Makro verwendet werden, das eine bestimmte Argument- oder Parameterliste hat. Zum Beispiel −

Live-Demo
#include <stdio.h>

#define  message_for(a, b)  \
   printf(#a " and " #b ": We love you!\n")

int main(void) {
   message_for(Carole, Debra);
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis −

Carole and Debra: We love you!

Der Operator zum Einfügen von Token (##)

Der Token-Einfügeoperator (##) innerhalb einer Makrodefinition kombiniert zwei Argumente. Es ermöglicht, dass zwei getrennte Tokens in der Makrodefinition zu einem einzigen Token verbunden werden. Zum Beispiel −

Live-Demo
#include <stdio.h>

#define tokenpaster(n) printf ("token" #n " = %d", token##n)

int main(void) {
   int token34 = 40;
   tokenpaster(34);
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis −

token34 = 40

Dies geschah, weil dieses Beispiel zu der folgenden tatsächlichen Ausgabe des Präprozessors führt −

printf ("token34 = %d", token34);

Dieses Beispiel zeigt die Verkettung von token##n in token34 und hier haben wir beide stringize verwendet und Token-Einfügen .

Der Defined()-Operator

Der Präprozessor definiert Der Operator wird in konstanten Ausdrücken verwendet, um festzustellen, ob ein Bezeichner mit #define definiert ist. Wenn der angegebene Bezeichner definiert ist, ist der Wert wahr (ungleich Null). Wenn das Symbol nicht definiert ist, ist der Wert falsch (Null). Der definierte Operator wird wie folgt angegeben −

Live-Demo
#include <stdio.h>

#if !defined (MESSAGE)
   #define MESSAGE "You wish!"
#endif

int main(void) {
   printf("Here is the message: %s\n", MESSAGE);  
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis −

Here is the message: You wish!

Parametrisierte Makros

Eine der leistungsstarken Funktionen des CPP ist die Fähigkeit, Funktionen mit parametrisierten Makros zu simulieren. Zum Beispiel könnten wir einen Code haben, um eine Zahl wie folgt zu quadrieren −

int square(int x) {
   return x * x;
}

Wir können den obigen Code mit einem Makro wie folgt umschreiben −

#define square(x) ((x) * (x))

Makros mit Argumenten müssen mit #define definiert werden Richtlinie, bevor sie verwendet werden können. Die Argumentliste ist in Klammern eingeschlossen und muss direkt auf den Makronamen folgen. Zwischen dem Makronamen und der geöffneten Klammer sind keine Leerzeichen zulässig. Zum Beispiel −

Live-Demo
#include <stdio.h>

#define MAX(x,y) ((x) > (y) ? (x) : (y))

int main(void) {
   printf("Max between 20 and 10 is %d\n", MAX(10, 20));  
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis −

Max between 20 and 10 is 20

C Sprache

  1. C# Hello World – Ihr erstes C#-Programm
  2. C#-Schlüsselwörter und Bezeichner
  3. C#-Variablen und (primitive) Datentypen
  4. C#-Operatoren
  5. C# Bitwise- und Bit-Shift-Operatoren
  6. C# Grundlegende Ein- und Ausgabe
  7. C#-Ausdrücke, -Anweisungen und -Blöcke (mit Beispielen)
  8. C#-Kommentare
  9. C#-switch-Anweisung
  10. C# ternärer (? :) Operator