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: Direktiven formen Ihren Code

Präprozessor-Direktiven geben dem Compiler Anweisungen zur Vorverarbeitung vor der eigentlichen Kompilierung.

Bekannt: #include bindet Header-Datei ein. Weitere: #define, #if, #else, #line etc.

#define Präprozessor

Erzeugt symbolische Konstanten (Makros):

#define MAKRO-NAME ERSETZUNGSTEXT

Alle nachfolgenden Vorkommen von MAKRO in der Datei werden vor Kompilierung durch ERSETZUNGSTEXT ersetzt.

#include <iostream>
using namespace std;
#define PI 3.14159
int main() {
    cout << "Value of PI: " << PI << endl;
    return 0;
}

Präprozessierung (gcc -E test.cpp > test.p) zeigt:

int main() {
    cout << "Value of PI: " << 3.14159 << endl;
    return 0;
}

Funktionsähnliche Makros

#define mit Argumenten:

#include <iostream>
using namespace std;
#define MIN(a,b) (((a)<(b)) ? a : b)
int main() {
    int i=100, j=30;
    cout << "The minimum is " << MIN(i,j) << endl;
    return 0;
}

Ausgabe: The minimum is 30

Bedingte Kompilierung

Selektives Kompilieren von Quellcode-Abschnitten. Struktur ähnlich if.

#ifndef NULL
#define NULL 0
#endif

Debugging an/aus per Makro:

#ifdef DEBUG
cerr << "Variable x = " << x << endl;
#endif

cerr wird nur kompiliert, wenn DEBUG vor #ifdef DEBUG definiert wurde.

Code auskommentieren:

#if 0
code prevented from compiling
#endif

Beispiel

#include <iostream>
using namespace std;
#define DEBUG
#define MIN(a,b) (((a)<(b)) ? a : b)
int main() {
    int i=100, j=30;
    #ifdef DEBUG
    cerr << "Trace: Inside main function" << endl;
    #endif
    #if 0
    cout << MKSTR(HELLO C++) << endl;
    #endif
    cout << "The minimum is " << MIN(i,j) << endl;
    #ifdef DEBUG
    cerr << "Trace: Coming out of main function" << endl;
    #endif
    return 0;
}

Ausgabe:

The minimum is 30
Trace: Inside main function
Trace: Coming out of main function

# und ## Operatoren

# (Stringizing): Ersetzt Argument durch String in Anführungszeichen.

#define MKSTR(x) #x
cout << MKSTR(HELLO C++) << endl;  // → "HELLO C++"

## (Token Pasting): Verknüpft zwei Tokens.

#define CONCAT(x,y) x##y
int xy = 100;
cout << CONCAT(x,y);  // → xy → 100

Vordefinierte C++ Makros

Nr.Makro & Beschreibung
1__LINE__ – Aktuelle Zeilennummer beim Kompilieren
2__FILE__ – Aktueller Dateiname
3__DATE__ – Kompilierdatum (Monat/Tag/Jahr)
4__TIME__ – Kompilierzeit (Stunde:Minute:Sekunde)
#include <iostream>
using namespace std;
int main() {
    cout << "__LINE__: " << __LINE__ << endl;
    cout << "__FILE__: " << __FILE__ << endl;
    cout << "__DATE__: " << __DATE__ << endl;
    cout << "__TIME__: " << __TIME__ << endl;
    return 0;
}

Beispielausgabe:

__LINE__: 6
__FILE__: test.cpp
__DATE__: Feb 28 2011
__TIME__: 18:52:48

C Sprache

  1. C#-Präprozessordirektiven meistern: Ein praktischer Leitfaden
  2. C++-Datentypen verstehen: Grundlagen, Modifizierer und Best Practices
  3. C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
  4. C++-Kommentare: Best Practices für lesbaren, wartbaren Code
  5. C++-Konstruktoren verstehen: Standard-, Parameter- und Kopierkonstruktor erklärt
  6. C++ Klassentemplates meistern: Ein praktischer Leitfaden
  7. Der C-Präprozessor (CPP) verstehen: Wie er die Kompilierung vereinfacht
  8. C++ Programmiersprache: Überblick & Kernfeatures
  9. C++ Konstanten & Literale: Typen, Syntax & Best Practices
  10. C++ Operatoren: Typen, Nutzung & Best Practices