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

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

  1. R, L und C Zusammenfassung
  2. C#-Schlüsselwörter und Bezeichner
  3. C#-Klasse und -Objekt
  4. Abstrakte C#-Klasse und -Methode
  5. C# Teilklasse und Teilmethode
  6. Versiegelte C#-Klasse und -Methode
  7. C#-Präprozessordirektiven
  8. C Schlüsselwörter und Bezeichner
  9. C - Konstanten und Literale
  10. C - Eingang und Ausgang