8    Präprozessor-Direktiven

In diesem Kapitel erfahren Sie, was Präprozessor-Direktiven sind, und wie Sie mit diesen z. B. Konstanten definieren und Ihre Programme auf verschiedenen Plattformen linken können. Bevor der Compiler nämlich den Quelltext verarbeitet, wird der Präprozessor gestartet. Der Präprozessor führt noch vor der eigentlichen Kompilierung einen zusätzlichen Übersetzungslauf oder besser Ersetzungslauf durch. Sie können dem Präprozessor für seinen Durchlauf zusätzliche Anweisungen geben, die Präprozessor-Direktiven. Bei Präprozessor-Direktiven steht immer das Zeichen # am Anfang der Zeile. Außerdem darf pro Zeile nur eine Direktive eingesetzt werden. Folgendes ist also nicht erlaubt:

#include <stdio.h> #define MAX_VAL 255

Kommentare dürfen hingegen nicht hinter einer Direktive stehen:

#include <stdio.h> // Header für Standardfunktionen

Die folgenden Arbeiten fallen für den Präprozessor auch ohne Ihre Direktiven an:

Des Weiteren gibt es Aufgaben für den Präprozessor, die vom Programmierer gesteuert werden können:

8.1    Dateien einfügen mit #include

Die Direktive #include, die Sie bereits kennen, ist also auch eine Präprozessor-Direktive und kopiert andere benannte (Include-)Dateien in das Programm ein. In der Regel handelt es sich dabei um Header-Dateien mit der Dateiendung *.h. Es gibt zwei Möglichkeiten, um die Präprozessor-Direktive #include zu verwenden:

#include <header>
#include "header"

Der Präprozessor entfernt die include-Zeile und ersetzt sie durch den Quelltext der include-Datei, bevor der Compiler den so modifizierten Text zur Übersetzung erhält.

Natürlich können Sie auch eigene Header-Dateien schreiben und diese mit include einkopieren. Haben Sie beispielsweise eine Header-Datei geschrieben und diese im Verzeichnis /user/meinInclude unter dem Namen meinheader.h gespeichert, müssen Sie die Header-Datei am Anfang des Quelltextes mit

#include "/user/meinInclude/meinheader.h"

einkopieren. Dabei muss das Verzeichnis angegeben werden, in dem die Header-Datei gespeichert wurde.

Dem Compiler Header-Dateien mitteilen

Sie sollten nicht den kompletten Pfad zu einer selbst geschriebenen Header-Datei angeben. In der Praxis werden diese Verzeichnisse dem Compiler über spezielle Optionen oder Einstellungen bekannt gemacht. Beim GCC-Compiler können Sie dazu z. B. den Schalter -I in der Kommandozeile verwenden. Bei Entwicklungsumgebungen finden Sie hierzu ebenfalls Optionen in den Projekteinstellungen.

Schreiben Sie die Header-Datei hingegen zwischen eckige Klammern (wie dies bei Standardbibliotheken meistens der Fall ist), also so:

#include <headerdatei.h>

dann wird die Header-Datei headerdatei.h im implementierungsdefinierten Pfad gesucht. Dieser Pfad befindet sich in dem Pfad, in dem sich die Header-Dateien Ihres Compilers wie beispielsweise stdio.h, stdlib.h, ctype.h, string.h usw. befinden.

Steht die Header-Datei zwischen zwei Hochkommata, also so:

#include "headerdatei.h"

dann wird sie im aktuellen Arbeitsverzeichnis (Working Directory) oder in dem Verzeichnis gesucht, das mit dem Compiler-Aufruf, beispielsweise mit einer Option wie -I, angegeben wurde – vorausgesetzt, Sie übersetzen das Programm in der Kommandozeile oder haben in der Entwicklungsumgebung entsprechende Angaben gemacht. Sollte diese Suche erfolglos sein, wird in denselben Pfaden gesucht, als hätten Sie #include <datei.h> angegeben.