Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Compiler-Direktiven

&pagelevel(3)&pagelevel

Allgemeines

Compiler-Direktiven ermöglichen es dem COBOL-Programmierer, Optionen für die Übersetzung anzugeben und die Quelltext-Manipulation zu steuern. Insbesondere kann mit Hilfe von Compiler-Direktiven die bedingte Compilierung gesteuert werden.

Syntaxregeln für alle Compiler-Direktiven

  1. Einer Compiler-Direktive können beliebig viele Leerzeichen vorangehen.

  2. Eine Compiler-Direktive muss, bezogen auf das Referenzformat, im ProgrammtextBereich stehen und es dürfen ihr nur Leerzeichen folgen.

  3. Eine Compiler-Direktive beginnt mit der Zeichenfolge „>>“, gefolgt von optionalen Leerzeichen und der eigentlichen Anweisung.

  4. Eine Compiler-Direktive muss allein in einer einzigen Zeile stehen. Ausnahmen siehe EVALUATE-Direktive ( "EVALUATE-Direktive ") und IF-Direktive ( "IF-Direktive ").

  5. Eine Compiler-Direktive darf auch in Bibliothekstext geschrieben werden (siehe COPY, Abschnitt „Anweisungen zur Quelltextmanipulation").

  6. EVALUATE- und IF-Direktive müssen in COPY-Elementen innerhalb des einkopierten Textes mit dem zugehörigen >>END-EVALUATE bzw. >>END-IF abgeschlossen sein.

  7. Die maximale Schachtelungstiefe von Direktiven beträgt 256.

  8. Eine Compiler-Direktive darf überall angegeben werden, außer:

    • die Nutzung wird für bestimmte Direktiven durch die Syntaxregeln eingeschränkt.

    • innerhalb einer Anweisung zur Quelltextmanipulation (siehe Abschnitt „Anweisungen zur Quelltextmanipulation")

    • zwischen fortgesetzter und Fortsetzungszeile

    • in einer Testhilfezeile

Allgemeine Regeln für alle Compiler-Direktiven

  1. Eine Compiler-Direktive ist von keiner „Replacing-Aktion“ einer COPY- oder REPLACE-Anweisung betroffen.

  2. Compiler-Direktiven wirken entweder in der Phase der Quelltextmanipulation, in der Listen-Erzeugungsphase oder in der Übersetzungsphase (siehe Übersicht auf "Steuerung des Compilers").
    Während der Übersetzungsphase werden die Compiler-Direktiven in der Reihenfolge abgearbeitet, wie sie in der Übersetzungsgruppe auftreten.

  3. Compiler-Direktiven gelten für alle nachfolgenden Quelltexte und Bibliothekstexte und sind vom Programmfluss unabhängig.

  4. Compiler-Direktiven werden als vor einer Übersetzungseinheit stehend betrachtet, wenn sie nicht zwischen der äußersten IDENTIFICATION DIVISION (bzw., wenn diese fehlt, dem ID-Paragrafen) und dem zugehörigen END-Eintrag angegeben sind.

  5. Enthält eine Übersetzungseinheit mehr als 65535 Zeilen1, so werden Direktiven, die normalerweise während der Übersetzungsphase wirken, ignoriert, wenn sie innerhalb dieser Übersetzungseinheit angegeben sind.

Arithmetischer Ausdruck

Ein arithmetischer Ausdruck kann bestehen aus ganzen Zahlen, Konstantennamen sowie den Zeichen „(“, „)“, „+“, „-“, „*“, „/“. Der Wertebereich muss für alle Zwischenergebnisse als 32-bit-Zahl darstellbar sein. Nachkommastellen werden ggf. abgeschnitten.

Für den Wertebereich des durch den arithmetischen Ausdruck repräsentierten Literals sowie für den Wertebereich aller bei der Berechnung des arithmetischen Ausdrucks anfallenden Zwischenergebnisse muss gelten:

-231 < Wertebereich < 231-1

Boolescher Ausdruck

Als Boolescher Ausdruck werden bezeichnet:

  • eine Vergleichsbedingung, in der beide Operanden Literale oder arithmetische Ausdrücke, gebildet aus Literalen, sind. Stellvertretend für Literale sind dabei auch Namen von Compilervariablen aus DEFINE-Direktiven zugelassen.

  • DEFINED-Bedingung

  • Ausdrücke, die durch die logischen Operatoren AND, OR, NOT und eventuell notwendigen Klammerungen aus booleschen Ausdrücken zusammengesetzt sind.

    Ausdrücke in Direktiven, die logische Operanden (AND bzw. OR) enthalten, erfordern eine vollständige Klammerung, um die Reihenfolge der Ausführung dieser logischen Operatoren festzulegen. Lediglich für arithmetische Teilausdrücke kann entsprechend der normalen Vorrangsregeln auf weitergehende Klammerungen verzichtet werden.

Bedingte Übersetzung

Mit Hilfe von bestimmten Compiler-Direktiven können ausgewählte Quellcode-Zeilen bei der Übersetzung entweder weggelassen oder mit übersetzt werden. Dieser Vorgang heißt bedingte Übersetzung. Dafür sind die DEFINE-, EVALUATE- und IF-Direktive vorgesehen.

DEFINED-Bedingung

Format


compilervariablenname-1 IS [NOT] DEFINED


Syntaxregel

  1. compilervariablenname-1 darf kein für die Compiler-Direktiven reserviertes Wort sein (siehe „Reservierte Wörter für Compiler-Direktiven" im Abschnitt „COBOL-Wörter").

Allgemeine Regel

  1. Wenn IS DEFINED angegeben und compilervariablenname-1 definiert ist, ergibt die

    Bedingung den Wert „wahr“. Wenn IS NOT DEFINED angegeben ist und compilervariablenname-1 nicht definiert ist, ergibt die Bedingung ebenfalls „wahr“.

    compilervariablenname-1 ist definiert, wenn folgende Voraussetzungen erfüllt sind:

    • compilervariablenname-1 wird in einer DEFINE-Direktive (siehe „DEFINE-Direktive") ohne OFF-Klausel spezifiziert.

    • Falls in der DEFINE-Direktive die PARAMETER-Klausel angegeben ist und der Wert vom Betriebssystem zur Verfügung gestellt wurde (siehe Handbuch „COBOL2000 Benutzerhandbuch“ [1]).


1 Dabei zählen Kommentar- und Leerzeilen sowie Compiler-Direktiven mit, die vor der IDENTIFICATION DIVISION angegeben und diese Übersetzungseinheit zugeordnet werden.