Programmiersprache Pascal

Bedingte Übersetzung

Bei vielen Programmiersystemen ist es möglich, gewisse Programmteile nur in Abhängigkeit von bestimmten Parametern zu übersetzen. Für ein solches Vorgehen können vor allem folgende Gründe sprechen: Die Steuerung der Programmübersetzung kann durch Auswertung der gesetzten Compiler-Optionen, durch Überprüfung der Gültigkeit spezieller Symbole oder durch Auswertung von Ausdrücken erfolgen.

Turbo Pascal, Delphi

Es besteht die Möglichkeit Symbole zu definieren, mit deren Hilfe der Übersetzungsprozeß gesteuert werden kann.
Die Symbole sind gültig für die jeweilige Quelltextdatei.
Die Anweisungen, mit denen die Symbole definiert und ausgewertet werden können, sind aus der Sicht des Pascal-Standards Kommentare.

Beispiel 1:
Einfügen einer Anweisung, die nur für Testzwecke benötigt wird
  {$IFDEF Debug}
    Writeln('X = ', X);
  {$ENDIF}
Beispiel 2:
Alternative: Nutzung des numerischen Koprozessors oder der Emulation
  {$IFDEF CPU87}
    {$N+}
    TYPE Real = Double;
  {$ELSE}
    {$N-}
    TYPE Single = Real;
         Double = Real;
         Extended = Real;
         Comp = Real;
  {$ENDIF}
Beispiel 3:
Verwendung von verschiedenen Units unter DOS und Windows
  {$IFDEF WINDOWS}
    USES WinCrt;
  {$ENDIF}
Delphi 1.0 besitzt einige vordefinierte Symbole:
  VER80    Versionsnummer des Compilers (8.0)
  WINDOWS  Betriebssystem-Umgebung ist MS-Windows
  CPU86    Rechner besitzt CPU aus der intel 80x86 Familie
  CPU87    Definiert, wenn der numerische Koprozessor 80x87 vorhanden ist
In Delphi 2.0 gibt es diese Symbole:
  VER90    Versionsnummer des Compilers (9.0)
  WIN32    Betriebssystem-Umgebung ist Win32
  CONSOLE  Anwendung nutzt die Konsole
  CPU386   Rechner besitzt CPU intel 80386 oder besser
Turbo Pascal 6.0/7.0 besitzt analog die folgenden vordefinierten Symbole:
  VER60    Versionsnummer des Compilers (6.0)
  VER70    Versionsnummer des Compilers (7.0)
  MSDOS    Betriebssystem-Umgebung ist MS-DOS
  CPU86    Rechner besitzt CPU aus der intel 80x86 Familie
  CPU87    Definiert, wenn der numerische Koprozessor 80x87 vorhanden ist
Ähnliches gilt für andere Versionen von Borland's Pascal.

Im Vergleich zum C-Precompiler sind die Möglichkeiten weitaus begrenzter.

Gnu Pascal

Verwendung der bei C üblichen Preprozessor-Anweisungen

  Definition eines Symbols
    #define symbol
  Löschen einer Symboldefinition
    #undef symbol
  Bedingte Compilation, wenn Symbol definiert ist
    #ifdef symbol
       Pascal-Anweisungen    { übersetzt, wenn symbol definiert }
    #else
       Pascal-Anweisungen    { übersetzt, wenn symbol nicht def. }
    #endif
  Bedingte Compilation, wenn Symbol nicht definiert ist
    #ifndef symbol
       Pascal-Anweisungen    { übersetzt, wenn symbol nicht def. }
    #else
       Pascal-Anweisungen    { übersetzt, wenn symbol definiert }
    #endif
Auch die in Turbo Pascal übliche Syntax kann verwendet werden.



P. Böhme, 24.07.1996