C++ Tutorial

 Präprozessor-Direktiven

Präprozessor-Directiven beginnen mit dem Zeichen # (Hash) und werden vor dem Übersetzungsvorgang vom Präprozessor ausgeführt. Sie werden nicht mit einem Semikolon abgeschlossen. Eine Präprozessor-Directive kennen Sie schon, die ...

include-Directive

Die Directiven

#include <hfile>
#include "sfile"

fügen eine Datei an der Stelle ein, an der die include-Directive steht. In der Regel wird die include-Directive eingesetzt, um Header-Dateien (.h Datei) einzubinden.

Bei der ersten Variante wird die Datei in einem vorgegebenen Pfad gesucht, der üblicherweise in den Compiler-Optionen eingestellt wird.

Die zweite Variante sucht die Datei ab dem Verzeichnis, in dem sich die Datei mit der include-Directive befindet. Wird sie dort nicht gefunden, wird im vorgegebenen Pfad gesucht.

define- und undef-Directive

Die Directive

#define SYMBOL

definiert ein Symbol, über den z.B. die Arbeit des Präprozessors gesteuert werden kann.

Um ein definiertes Symbol zu löschen, wird die Directive

#undef SYMBOL

verwendet.

ifdef-, ifndef- und endif-Directive

Die Präprozessor-Anweisungen

#ifdef SYMBOL
  // Anweisung
#endif

#ifndef SYMBOL
  // Anweisungen
#endif

prüfen, ob ein Symbol nicht definiert ist oder nicht.

Ist das Symbol (nicht) definiert, werden die Anweisungen bis zum #endif vom Präprozessor mit in den Quellcode übernommen.

// Header-Datei myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H
... // Anweisungen der Header-Datei
#endif

Das Beispiel verhindert, dass die Header-Datei myheader.h mehrfach von einer Quellcode-Datei eingebunden wird. Dies wird auch als Include-Guard bezeichnet. 

#include <iostream>

#define DEBUG
int main()
{
   #ifdef DEBUG
      std::cout << "Beginn main()\n";
   #endif // DEBUG
   std::cout << "Hallo Welt!\n";
   #ifdef DEBUG
      std::cout << "Ende main()\n";
   #endif // DEBUG
}

Damit sind die Grundlagen abgeschlossen und im nächsten Kapitel erfolgt der Einstieg in die Objektorientierte Programmierung unter C++.