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 & Makros: #include, #define & bedingte Kompilierung meistern

C-Präprozessor & Makros

Entdecken Sie die Macht von C's Präprozessor: Lernen Sie, Header-Dateien einzubinden, Konstanten und Funktionen zu definieren und den Kompilierungsfluss mit bedingten Direktiven zu steuern.

C-Präprozessor & Makros: #include, #define & bedingte Kompilierung meistern

Der C-Präprozessor läuft vor dem Compiler und transformiert Ihren Quellcode, indem er Makros expandiert, Header-Dateien einbindet und bedingte Anweisungen auswertet. Er ist ein unverzichtbares Werkzeug für flexiblen, wiederverwendbaren Code.

Alle Präprozessor-Direktiven beginnen mit einem #-Symbol. Zum Beispiel:

#define PI 3.14

Header-Dateien einbinden: #include

Die #include-Direktive fügt den Inhalt einer Header-Datei direkt in Ihre Quelldatei ein. Häufige Verwendung:

#include <stdio.h>

Ohne #include <stdio.h> wären Funktionen wie printf() und scanf() undefiniert. Sie können auch benutzerdefinierte Header erstellen:

#include "my_header.h"

Benutzerdefinierte Header eignen sich, um verwandte Funktionsdeklarationen und Konstanten zu gruppieren.

Konstanten und Ausdrücke definieren: #define

Ein Makro ersetzt ein Token oder einen Ausdruck durch einen Wert vor der Kompilierung. Beispiel:

#define c 299792458 /* Lichtgeschwindigkeit */

Die Verwendung von c an beliebiger Stelle in Ihrem Programm expandiert zu 299792458.

Beispiel 1: PI definieren

#include <stdio.h>
#define PI 3.1415
int main() {
    float radius, area;
    printf("Enter the radius: ");
    scanf("%f", &radius);
    area = PI * radius * radius;
    printf("Area=%.2f", area);
    return 0;
}

Funktionsähnliche Makros

Makros können Argumente akzeptieren und funktionieren ähnlich wie Inline-Funktionen:

#define circleArea(r) (3.1415 * (r) * (r))

Für circleArea(5) expandiert der Präprozessor zu (3.1415 * 5 * 5).

Beispiel 2: Funktionsähnliches Makro verwenden

#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;
}

Bedingte Kompilierung

Bedingte Direktiven lassen Sie Codeblöcke zur Kompilierzeit ein- oder ausschließen, ähnlich wie if-Anweisungen, aber vor der Ausführung evaluiert.

Häufige Anwendungsfälle

Wichtige Direktiven

#ifdef MACRO /* Code wenn MACRO definiert ist */ #endif
#if EXPRESSION /* Code wenn EXPRESSION ungleich Null */ #else /* Code wenn EXPRESSION Null */ #endif
#if EXPRESSION /* code */ #elif ANOTHER_EXPRESSION /* alternativer code */ #else /* fallback code */ #endif
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 /* buffer ist groß genug */ #endif

Vordefinierte Makros

MakroWert
__DATE__String des aktuellen Kompilierungsdatums
__FILE__String des aktuellen Dateinamens
__LINE__Zeilennummer, an der das Makro erscheint
__STDC__Ungleich Null, wenn der Compiler dem ANSI-C-Standard folgt
__TIME__String der aktuellen Kompilierungszeit

Beispiel 3: Kompilierungszeit anzeigen

#include <stdio.h>
int main() {
    printf("Current time: %s", __TIME__);
    return 0;
}

Ausgabe-Beispiel:

Current time: 19:54:39

Empfohlene Weiterführende Themen

C Sprache

  1. Umfassende Zusammenfassung: Widerstände, Spulen und Kondensatoren in AC-Kreisen
  2. C# Keywords und Identifiers verstehen: Regeln, Listen und Best Practices
  3. C# Klassen & Objekte: Fundamente für robustes OOP
  4. C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
  5. C# Partielle Klassen und Methoden verstehen
  6. Versiegelte Klassen und Methoden in C# meistern
  7. C#-Präprozessordirektiven meistern: Ein praktischer Leitfaden
  8. C Schlüsselwörter & Bezeichner: Ein praktischer Leitfaden
  9. C-Konstanten und Literale: Typen, Verwendung & Best Practices
  10. Eingabe und Ausgabe in C meistern: scanf, printf & Co.