Präprozessorbefehle

In dieser Übersicht werden die Befehle des Präprozessors dargestellt. Die Befehle zur bedingten Compilierung und zur Define-Anweisung wurden im Kapitzel Programmstrukturierung bereits ausführlich behandelt.

Befehl Beschreibung Beispiel
#include <file.h> Einbinden einer Standardheaderdatei. Diese muß im Suchpfad des Compilers zu finden sein #include <iostream.h>
#include "file.h" Einbinden einer Benutzereigenen (Include-)Datei.
Das Einfügen geschieht, als ob der Inhalt der Datei in der Tat in der aufrufenden Datei stehen würde
#include "klasse.h"
#define name sequenz Zukünftiges Auftreten von name wird durch sequenz ersetzt. Dies gilt nicht innerhalb von Strings. #define PI 3.14159
#define name(v1, v2, ..) sequenz Definiert ein Makro, wobei innerhalb des Makros Variablen erlaubt sind. Es kann hier insbesondere zu unerwünschten Nebeneffekten kommen #define max(a,b) ((a)>(b)? (a) : (b))
#undef Mit diesem Befehl wird eine bereits definierte Konstante bzw. ein definiertes Makro wieder gelöscht. #undef PI
#if bed |
#ifdef def|
#ifndef bed/def

[#else|#elif bed2]

#endif
Die Bedingung bed (bei #if) bzw. das (Nicht-)Vorhandensein der Definition def (bei #if(n)def wird überprüft.
Im positiven Falle werden alle folgenden Anweisungen compiliert. Andernfalls ein evt. vorhandenen #else|#elif-Block mit neuer Bedingung bei #elif.
#endif schließt die bedingte Compilierung ab.
#ifndef KLASSE_H
#define KLASSE_H
...
...
#endif
defined (name) Prüft ob ein name schon definiert ist (in einem Bedingungsterm)
Damit ist #ifdef äquivalent zu #if defined
und #ifndef zu #if !defined
siehe Beschreibung
line const ["filename"] Dieser Befehl wird manchmal von Hilfsprogrammen zur Analyse benötigt.
Der Compiler nimmt nach einem solchen Befehl an, daß sich der Compilierungsprozeß in der Zeile zeile in der Datei filename befindet
Die Angabe des Dateinamens ist optional. Fällt sie weg, bleibt der Dateiname unverändert.
line 300 "irgendwas.cpp"
#error [string] Der Compiler erzeugt eine Fehlermeldung mit dem Inhalt string.
Die Angabe des Strings ist optional.
#error fatal error!
#pragma [string] Der Präprozessor führt eine implementierungsabhängige Aktion durch, sofern diese bekannt ist. ??
# Eine derartige Anweisung hat keinen Effekt ;-)

Darüberhinaus sind folgende Konstanten vordefiniert und dürfen nich umdefiniert oder gelöscht werden (was auch für den Operator defined gilt). (siehe auch ein Beispiel im Kapitel Programmstruktrurierung. )

Je nach C++-Compiler können noch andere (insbesondere plattformabhängige) Präprozessorvefehle definiert sein. Dies muß dann im Handbuch bzw. der Online-Hilfe nachgeschlagen werde.