Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

MODIFY-SOURCE-PROPERTIES

&pagelevel(5)&pagelevel

Alias-Name:    SET-SOURCE-PROPERTIES

Mit dieser Anweisung werden Quellprogrammeigenschaften festgelegt und das Verhalten des Präprozessors und des C- und C++-Frontends beinflusst.

MODIFY-SOURCE-PROPERTIES

/* Option zur Auswahl des Sprachmodus */

LANGUAGE= *UNCHANGED / *C(...) / *CPLUSPLUS(...)


*C(...)



|

MODE= *UNCHANGED / *LATEST / *1990 / *2011 / 






*KERNIGHAN-RITCHIE



|

STRICT = *UNCHANGED / *NO / *YES


*CPLUSPLUS(...)



|

MODE= *UNCHANGED / *LATEST / *2017 / *2020 /






*V2-COMPATIBLE / *V3-COMPATIBLE



|

STRICT = *UNCHANGED / *NO / *YES

/* Präprozessor-Optionen */

,DEFINE= *NONE / *UNCHANGED / list-poss: <c-string 1..125 with-low> / <name 1..125 with-under> /





*SUBSTITUTE(...)


*SUBSTITUTE(...)



|

IDENTIFIER= <c-string 1..125 with-low> / <name 1..125 with-under>



|

,TOKEN-STRING= <c-string 1..125 with-low> / <name 1..125 with-under>

,UNDEFINE= *NONE / *UNCHANGED / *ALL / list-poss: <c-string 1..125 with-low> /






<name 1..125 with-under>

,ASSERT= *NONE / *UNCHANGED / list-poss: *SUBSTITUTE(...)


*SUBSTITUTE(...)



|

IDENTIFIER= <c-string 1..125 with-low> / <name 1..125 with-under>



|

,TOKEN-STRING= <c-string 1..125 with-low> / <name 1..125 with-under>

,PREINCLUDE= *UNCHANGED / *NONE / <c-string 1..1024 with-low>

,COMMENTS= *UNCHANGED / *YES / *NO

,PREPROCESSING-MODE= *UNCHANGED / *ANSI / *KR

,IMPLICIT-INCLUDE= *UNCHANGED / *YES / *NO

 /* Gemeinsame Frontend-Optionen in C und C++ */

,SIGNED-CHARACTER= *UNCHANGED / *YES / *NO

,AT-ALLOWED= *UNCHANGED / *YES / *NO

,DOLLAR-ALLOWED= *UNCHANGED / *YES / *NO

,ENUM-TYPE= *UNCHANGED / *VALUE-DEPENDENT / *LONG

,SIGNED-FIELDS= *UNCHANGED / *SIGNED / *UNSIGNED

,PLAIN-FIELDS= *UNCHANGED / *SIGNED / *UNSIGNED

,PRESERVING= *UNCHANGED / *UNSIGNED / *LONG

,ALTERNATIVE-TOKENS= *UNCHANGED / *YES / *NO

,EXTERNAL-DEFINITION= *UNCHANGED / *BY-SOURCE-LANGUAGE / *UNIQUE /





*MULTIPLY-ALLOWED

,LONGLONG= *UNCHANGED / *YES / *NO

,END-OF-LINE-COMMENTS= *UNCHANGED / *YES / *NO

,LITERAL-ENCODING= *UNCHANGED / *NATIVE / *ASCII / *ASCII-FULL / *EBCDIC / *EBCDIC-FULL

/* C++-spezifische Optionen */

,INSTANTIATION= *UNCHANGED / *NONE / *AUTO / *LOCAL / *ALL

,USE-STD-NAMESPACE= *UNCHANGED / *YES / *NO

,KEYWORD-BOOL= *UNCHANGED / *YES / *NO

,KEYWORD-WCHAR= *UNCHANGED / *YES / *NO

,LOOP-INIT= *UNCHANGED / *OLD / *NEW

,SPECIALIZATION= *UNCHANGED / *OLD / *NEW

Optionen zur Auswahl des Sprachmodus

LANGUAGE =

Mit dieser Option wird angegeben, in welcher Programmiersprache, C oder C++, die zu übersetzenden Quellen vorliegen.
Die Standardeinstellung des Compilers ist LANGUAGE=*CPLUSPLUS(MODE=*LATEST, STRICT=*NO).

LANGUAGE = *UNCHANGED

Es gilt die Angabe der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

LANGUAGE = *C(...)
Das Quellprogramm ist ein C-Programm.

MODE = *UNCHANGED / *LATEST / *1990 / *2011 / *KERNIGHAN-RITCHIE

Der Operand MODE bestimmt den C-Sprachmodus:

*UNCHANGED:

Es gilt die Angabe der letzten MODIFY-SOURCE-PROPERTIES-Anweisung mit LANGUAGE=*C.

*LATEST:

Diese Angabe entspricht der Angabe des letzten unterstützten Standards und kann sich in zukünftigen Compiler-Versionen ändern. In dieser Version des Compilers ist die Angabe identisch zu *2011.

*1990:

C89-Modus
Der Compiler unterstützt C-Code gemäß dem ANSI-/ISO-C-Standard von 1990. Dieser Standard ist auch als ANSI C89-Standard bekannt.
Die Angabe entspricht der Angabe *ANSI bzw. *STRICT-ANSI des C/C++ V3-Compilers.
__STDC_VERSION__ hat den Wert 199409L.

*2011:

C11-Modus
Der Compiler unterstützt C-Code gemäß dem C-Standard von 2011.
__STDC_VERSION__ hat den Wert 201112L.

*KERNIGHAN-RITCHIE:

K&R-C-Modus
Der Compiler akzeptiert C-Code gemäß der Definition von Kernighan/Ritchie („Programmieren in C“, 1. Ausgabe). Darüberhinaus unterstützt er C-Sprachmittel des ANSI-C-Standards, die in der Semantik nicht von der Kernighan/Ritchie-Definition abweichen (z.B. Funktions-Prototypen, const, volatile). Dies erleichtert die Umstellung einer K&R-C-Quelle auf ANSI-C. Es stehen alle C-Bibliotheksfunktionen des CRTE zur Verfügung (ANSI-Funktionen, POSIX- und X/OPEN-Funktionen, UNIX-Erweiterungen).
Bezüglich des Präprozessor-Verhaltens ist ANSI-/ISO-C voreingestellt. Mit der Option PREPROCESSING-MODE=*KR kann das Präprozessor-Verhalten auf K&R-C umgestellt werden (ggf. bei der Portierung von alten C-Quellen aus einem UNIX-System notwendig).
__STDC_VERSION__ ist undefiniert. Der Operand STRICT hat keinen Effekt, d.h. es gilt immer STRICT=*NO.

STRICT = *UNCHANGED / *NO / *YES
*NO:

Einige erforderliche Compilermeldungen entfallen, der Namensraum ist nicht auf Namen beschränkt, die vom Standard spezifiziert sind, und einige Erweiterungen sind enthalten.
__STDC__ hat den Wert 0, _STRICT_STDC ist nicht definiert.

*YES:

Der Namensraum ist auf die im Standard definierten Namen beschränkt, und es stehen nur die im Standard definierten C-Bibliotheksfunktionen zur Verfügung. Bestimmte Erweiterungen (wie das Schlüsselwort asm) und einige erwartete Prototyp-Deklarationen aus den Standard-Includes (stdio.h, stdlib.h etc.) sind nicht verfügbar.

Abweichungen vom Standard führen zu Compilermeldungen (zumeist Warnings). Durch Angabe der Option ANSI-VIOLATIONS=*ERROR (siehe "MODIFY-DIAGNOSTIC-PROPERTIES") kann im Falle von Standard-Abweichungen die Ausgabe von Errors erzwungen werden.
__STDC__ hat den Wert 1, _STRICT_STDC ist definiert.

LANGUAGE = *CPLUSPLUS(...)
Das Quellprogramm ist ein C++-Programm. Dies ist auch die Standardeinstellung des Compilers, bevor die Programmiersprache zum ersten mal mit der LANGUAGE-Option definiert wird.

MODE = *UNCHANGED / *LATEST / *2017 / *2020 / *V2-COMPATIBLE / *V3-COMPATIBLE

Der Operand MODE bestimmt den C++-Sprachmodus:

*UNCHANGED:

Es gilt die Angabe der letzten MODIFY-SOURCE-PROPERTIES-Anweisung mit LANGUAGE=*CPLUSPLUS.

*LATEST:

Diese Angabe entspricht der Angabe des letzten unterstützten Standards und kann sich in zukünftigen Compiler-Versionen ändern. In dieser Version des Compilers ist die Angabe identisch zu *2020.

*2017:

C++ 2017-Modus
Der Compiler unterstützt C++-Code gemäß dem C++-Standard von 2017.

__cplusplus hat den Wert 201703L und __STDC_VERSION__ den Wert 199409L.

*2020:

C++ 2020-Modus
Der Compiler unterstützt C++-Code gemäß dem C++-Standard von 2020. Eine volle Unterstützung der C++ 2020-Bibliothek ist aktuell nicht verfügbar, statt dessen wird die existierende C++ 2017-Bibliothek verwendet.

__cplusplus hat den Wert 202002L und __STDC_VERSION__ den Wert 199409L.

*V2-COMPATIBLE:

Cfront-C++-Modus
Es werden die C++-Sprachmittel des Cfront V3.0.3 unterstützt. Cfront V3.0.3 wurde erstmals mit dem C++-Compiler V2.1 freigegeben.
Es steht die Cfront-kompatible C++-Bibliothek für komplexe Mathematik und stromorientierte Ein-/Ausgabe zur Verfügung.
Zur Cfront-C++-Bibliothek siehe auch Abschnitt „Die Cfront-C++-Bibliothek“.
C++-Quellen müssen mit MODE=*V2-COMPATIBLE übersetzt werden, wenn die Module mit C++-V2.1/V2.2-Modulen verknüpfbar sein sollen.
Diese Angabe entspricht der Angabe *CPP des C/C++ V3-Compilers.

__cplusplus hat den Wert 1 und __STDC_VERSION__ den Wert 199409L. Der Operand STRICT hat keinen Effekt, d.h. es gilt immer STRICT=*NO.

*V3-COMPATIBLE:

C++ V3-Modus
Der Compiler unterstützt C++-Code entsprechend dem C/C++ V3-Compiler.
Diese Angabe entspricht der Angabe *ANSI bzw. *STRICT-ANSI des C/C++ V3-Compilers.

__cplusplus den Wert 2 (falls STRICT=*NO) bzw. 199612L (falls STRICT=*YES) und __STDC_VERSION__ den Wert 199409L.

STRICT = *UNCHANGED / *NO / *YES
*NO:

Einige erforderliche Compilermeldungen entfallen, der Namensraum ist nicht auf Namen beschränkt, die vom Standard spezifiziert sind, und einige Erweiterungen sind enthalten.
__STDC__ hat den Wert 0, _STRICT_STDC ist nicht definiert.

*YES:

Der Namensraum ist auf die im Standard definierten Namen beschränkt, und es stehen nur die im Standard definierten C++-Bibliotheksfunktionen zur Verfügung. Bestimmte Erweiterungen (wie das Schlüsselwort asm) und einige erwartete Prototyp-Deklarationen aus den Standard-Includes (stdio.h, stdlib.h etc.) sind nicht verfügbar.

Abweichungen vom Standard führen zu Compilermeldungen (zumeist Warnings). Durch Angabe der Option ANSI-VIOLATIONS=*ERROR (siehe "MODIFY-DIAGNOSTIC-PROPERTIES") kann im Falle von Standard-Abweichungen die Ausgabe von Errors erzwungen werden.
__STDC__ hat den Wert 1, _STRICT_STDC ist definiert.

Präprozessor-Optionen

DEFINE = *NONE
Für den aktuellen Übersetzungslauf gelten ausschließlich die im Programm durch #define-Anweisungen definierten bzw. die vom Compiler vordefinierten Namen und Werte.

DEFINE = *UNCHANGED
Es gelten die Angaben der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

DEFINE = <c-string 1..125 with-low> / <name 1..125 with-under>
Mit <c-string> / <name> wird ein Name definiert. Diese Definition hat dieselbe Wirkung wie folgende Anweisung in einem Programm:

#define name 1

Solche Namen werden z.B. im Programm mit den Präprozessoranweisungen #ifdef, #ifndef bzw. #if defined(), #if ! defined() abgefragt. Siehe auch Beispiel ("MODIFY-SOURCE-PROPERTIES").

Bei Verwendung der POSIX-Bibliotheksfunktionen muss vor Auftreten der ersten #include-Anweisung im Programm das Define _OSD_POSIX gesetzt sein. Dies wird am einfachsten mit der Definition bei der Übersetzung erreicht.

DEFINE = *SUBSTITUTE(...)
Mit dieser Struktur lassen sich Makros und symbolische Konstanten definieren (analog zu einer #define-Anweisung für Textersatz). Siehe auch Beispiel unten.

IDENTIFIER = <c-string 1..125 with-low> / <name 1..125 with-under>
<c-string> / <name> bezeichnet den Namen, der im Quellprogramm durch den mit TOKEN-STRING angegebenen Wert bzw. Text ersetzt werden soll.

TOKEN-STRING = <c-string 1..125 with-low> / <name 1..125 with-under>
<c-string> / <name> gibt den Wert bzw. Text an, durch den der mit IDENTIFIER bezeichnete Name im Quellprogramm ersetzt werden soll.

Hinweis

Widersprechen Angaben in der DEFINE-Option irgendwelchen #define-Anweisungen im Quellprogramm, haben die Angaben im Quellprogramm immer Vorrang!

Beispiel: DEFINE-Option

MODIFY-SOURCE-PROP DEFINE=('mch_file',DEBUG,_OSD_POSIX,*SUB('host',BS2000),*SUB(LAN,'C++'))

Mit DEFINE definierte Werte müssen in Hochkommatas eingeschlossen werden, wenn sie andere Zeichen als die Großbuchstaben A bis Z, die Ziffern 0 bis 9 oder die Sonderzeichen $, #, @ und _ enthalten (vgl. Tabelle 2 "SDF-Metasyntax").

Die obigen Angaben in der DEFINE-Option entsprechen folgenden #define-Anweisungen im Quellprogramm:


#define mch_file 1
#define DEBUG 1
#define _OSD_POSIX 1
#define host BS2000
#define LAN C++

UNDEFINE = *NONE
Die DEFINE-Angaben (s.o.) bleiben standardmäßig unverändert.

UNDEFINE = *UNCHANGED
Es gelten die Angaben der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

UNDEFINE = *ALL
Alle DEFINE-Angaben werden gelöscht.

UNDEFINE = <c-string 1..125 with-low> / <name 1..125 with-under>
Die mit DEFINE angegebenen Namen <c-string> / <name> werden gelöscht.

ASSERT = *NONE / *UNCHANGED / list-poss: *SUBSTITUTE(...)

Mit dieser Option kann ein Prädikat (Assertion) definiert werden, analog zur Präprozessor-Anweisung #assert (siehe "Erweiterungen gegenüber ANSI-/ISO-C").

ASSERT= *SUBSTITUTE(...)

IDENTIFIER = <c-string 1..125 with-low> / <name 1..125 with-under>
<c-string> / <name> bezeichnet den Namen des Prädikats.

TOKEN-STRING = <c-string 1..125 with-low> / <name 1..125 with-under>
<c-string> / <name> gibt den Wert bzw. Text an, für den das mit IDENTIFIER bezeichnete Prädikat gilt.

PREINCLUDE = *UNCHANGED / *NONE / <c-string 1..1024 with-low>
Mit dieser Option wird eine Include-Datei spezifiziert, die via (imaginärer) #include-Anweisung am Anfang des Quellprogramms inkludiert wird (Pre-Include). Der Präprozessor sucht diese Include-Datei in den USER-INCLUDE-Pfaden.

Die via PREINCLUDE-Option spezifizierte Include-Datei wird wie eine Include-Datei behandelt, die innerhalb einer #include-Anweisung am Anfang des Quellprogramms angegeben ist.

Sollen mehr als eine Include-Datei pre-inkludiert werden, dann müssen mehrere #include-Anweisungen in einer einzigen Include-Datei zusammengefasst werden, die dann via PREINCLUDE-Option zu spezifizieren ist.

COMMENTS = *UNCHANGED / *YES / *NO
Mit dieser Option lässt sich festlegen, ob das vom Präprozessor erzeugte expandierte Quellprogramm auch die Kommentare enthalten soll.

PREPROCESSING-MODE = *UNCHANGED / *ANSI / *KR

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

*ANSI

Dies ist die Voreinstellung in allen C- und C++-Sprachmodi des Compilers. Das heißt, dass standardmäßig auch im K&R-C-Modus das Präprozessor-Verhalten entsprechend dem ANSI-/ISO-C-Standard unterstützt wird.

*KR

Mit *KR kann das veraltete Präprozessor-Verhalten gemäß Reiser cpp und Johnson pcc eingeschaltet werden.

IMPLICIT-INCLUDE = *UNCHANGED / *YES / *NO
Diese Option betrifft nur C++-Templates. Es wird festgelegt, ob die Definition eines Templates implizit inkludiert wird (siehe Abschnitt „Implizites Inkludieren“).

Gemeinsame Frontend-Optionen in C und C++

SIGNED-CHARACTER = *UNCHANGED / *YES / *NO

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

*NO

Der Datentyp char ist standardmäßig vom Typ unsigned.

*YES

char wird in Ausdrücken und Konversionen als signed char behandelt. Bei Verwendung dieser Option können Portabilitätsprobleme auftreten!

AT-ALLOWED = *UNCHANGED / *YES / *NO
Das at-Zeichen ’@’ ist in Bezeichnern erlaubt (*YES) bzw. nicht erlaubt (*NO).

Die Cfront-C++-Bibliothek enthält Deklarationen mit dem „at“-Zeichen (@) (siehe "Die Cfront-C++-Bibliothek").

DOLLAR-ALLOWED = *UNCHANGED / *YES / *NO
Das Dollar-Zeichen ’$’ ist in Bezeichnern erlaubt (*YES) bzw. nicht erlaubt (*NO).

ENUM-TYPE = *UNCHANGED / *VALUE-DEPENDENT / *LONG

Diese Option steuert die Behandlung von enum-Daten.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

*VALUE-DEPENDENT

Standardmäßig werden enum-Daten abhängig vom Wertebereich auf char, short oder long abgebildet.

*LONG

Die enum-Daten werden immer wie Objekte vom Typ long behandelt.

SIGNED-FIELDS = *UNCHANGED / *SIGNED / *UNSIGNED
*SIGNED: Standardmäßig werden signed Bitfelder wie signed behandelt.

*UNSIGNED: signed Bitfelder sind immer vom Typ unsigned. Diese Angabe wird aus Kompatibilitätsgründen zu älteren C-Versionen angeboten und ist nur im K&R-C-Modus sinnvoll.

PLAIN-FIELDS = *UNCHANGED / *SIGNED / *UNSIGNED
Diese Option steuert, ob Integer-Bitfelder (short, int, long) standardmäßig vom Typ signed (*SIGNED) oder unsigned (*UNSIGNED) sind.

PRESERVING = *UNCHANGED / *UNSIGNED / *LONG
Diese Option steuert, ob das Ergebnis von arithmetischen Operationen mit Operanden vom Typ long und unsigned int, gemäß K&R (erste Ausgabe, Anhang 6.6) vom Typ long ist (*LONG) oder gemäß ANSI-/ISO-C vom Typ unsigned long (*UNSIGNED).

ALTERNATIVE-TOKENS = *UNCHANGED / *YES / *NO

Diese Option steuert, ob der Compiler alternative Tokens erkennen soll:

  • in den C- und C++-Sprachmodi Digraph-Sequenzen (z.B. <: für [),

  • nur in den C++-Sprachmodi zusätzliche Schlüsselwort-Operatoren (z.B. and für &&, bitand für &).

*YES ist die Voreinstellung in den Sprachmodi C 2011, C++ V3, C++ 2017 und C++ 2020.

*NO ist die Voreinstellung in allen anderen Sprachmodi.

EXTERNAL-DEFINITION =
Diese Option steuert, wie der Compiler den Speicher für die extern sichtbaren Variablen eines Moduls anlegt. Dies ist dann von Bedeutung, wenn das Programm aus mehreren Modulen besteht, die anschließend zu einem Programm gebunden werden.

EXTERNAL-DEFINITION = *UNCHANGED
Es gelten die Angaben der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

EXTERNAL-DEFINITION = *BY-SOURCE-LANGUAGE
Der Wert der Option EXTERNAL-DEFINITION richtet sich nach den Angaben in den Sprachmodus-Optionen:

LANGUAGE=*C(MODE=*KERNIGHAN-RITCHIE): MULTIPLY-ALLOWED

LANGUAGE=*C(MODE=*1990/*2011): UNIQUE

LANGUAGE=*CPLUSPLUS(): UNIQUE

EXTERNAL-DEFINITION = *UNIQUE
Extern sichtbare Variablen dürfen nur in genau einem Modul definiert werden und müssen in allen anderen Modulen als extern deklariert werden. Der Speicherplatz für solche Variablen wird im Datenmodul desjenigen Objekts angelegt, in dem die Variable definiert wurde. Ist die Variable in mehr als einem Modul definiert, so erhält man beim Binden eine entsprechende Fehlermeldung.

EXTERNAL-DEFINITION = *MULTIPLY-ALLOWED
Diese Angabe wird für Programme verwendet, in denen eine extern sichtbare Variable in mehreren Modulen definiert wird, aber nur genau einem Speicherbereich zugeordnet werden soll. Um dies zu erreichen, darf die Variable bei keiner Definition statisch initialisiert werden. Der Compiler legt den Speicher für diese Variable im COMMON-Bereich an, so dass später nach dem Binden nur genau ein Speicherbereich der mehrfach definierten Variable zugeordnet ist.
Wenn die Variable bei der Definition statisch initialisiert wird, wird der Speicherbereich nicht im COMMON-Bereich, sondern im Datenbereich angelegt. Die Zuordnung zu genau einem Speicherbereich ist dann nicht möglich!

Diese Angabe ist in den C++-Sprachmodi nicht erlaubt.

LONGLONG = *UNCHANGED / *YES / *NO

Diese Option steuert, ob der Datentyp long long vom Compiler erkannt wird.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

*YES

Standardmäßig wird der Datentyp long long erkannt. In diesem Fall wird das Präprozessor-Define _LONGLONG gesetzt.

*NO

Der Gebrauch des Datentyps long long führt zu einem Fehler. Dieser Wert ist nur im strikten C89-Modus und im strikten C++ V3-Modus zulässig.

END-OF-LINE-COMMENTS = *UNCHANGED / *YES / *NO

Diese Option steuert, ob der Compiler C++-Kommentare (//...) auch in C-Programmen akzeptiert. C++-Kommentare können nur im erweiterten C89-Modus (MODE=*1990, STRICT=*NO) zugelassen werden. Im strikten C89-Modus und im K&R-C-Modus sind C++-Kommentare nicht erlaubt, in den C++-Modi und im C11-Modus sind sie immer erlaubt.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

*YES

Der Compiler akzeptiert C++-Kommentare im erweiterten C89-Modus.

*NO

Der Compiler akzeptiert keine C++-Kommentare im erweiterten C89-Modus (Voreinstellung).

LITERAL-ENCODING = *UNCHANGED / *NATIVE / *ASCII / *ASCII-FULL / *EBCDIC / *EBCDIC-FULL

Diese Option legt fest, ob der C/C++-Compiler Objekt-Code für EBCDIC-Zeichen und EBCDIC-Zeichenketten im EBCDIC- oder im ASCII-Format (ISO 8859-1) erzeugt.

In C/C++ können Zeichenketten binär codierte Zeichen als oktale oder sedezimale Escape-Sequenzen mit folgender Syntax enthalten:

  • oktale Escape-Sequenzen:       ́\[0-7] [0-7] [0-7] ́

  • sedezimale Escape-Sequenzen:   ́\x[0-9A-F] [0-9A-F] ́

Ob der C/C++-Compiler Escape-Sequenzen in das ASCII-Format konvertiert oder nicht, hängt von dem bei LITERAL-ENCODING = ... spezifizierten Wert ab.

LITERAL-ENCODING = *UNCHANGED
Es gelten die Einstellungen der letzten MODIFY-SOURCE-PROPERTIES-Anweisung.

LITERAL-ENCODING = *NATIVE
Der C/C++-Compiler belässt Code für Zeichen und Zeichenketten im EBCDIC-Format, d.h. er übernimmt die Zeichen(ketten) unkonvertiert in den Objektcode.
*NATIVE ist Voreinstellung.

LITERAL-ENCODING =*ASCII
Der C/C++-Compiler erzeugt Code für Zeichen und Zeichenketten im ASCII-Format. In den Zeichenketten enthaltene Escape-Sequenzen werden nicht in das ASCII-Format konvertiert.

LITERAL-ENCODING =*ASCII-FULL
Der C/C++-Compiler erzeugt Code für Zeichen und Zeichenketten im ASCII-Format. In den Zeichenketten enthaltene Escape-Sequenzen werden ebenfalls in das ASCII-Format konvertiert.

LITERAL-ENCODING =*EBCDIC
Der C/C++-Compiler belässt Code für Zeichen und Zeichenketten im EBCDIC-Format. d.h. er übernimmt die Zeichen(ketten) unkonvertiert in den Objekt-Code.

LITERAL-ENCODING=*EBCDIC hat somit dieselbe Wirkung wie LITERAL-ENCODING=*EBCDIC-FULL oder LITERAL-ENCODING=*NATIVE

LITERAL-ENCODING =*EBCDIC-FULL
Der C/C++-Compiler belässt Code für Zeichen und Zeichenketten im EBCDIC-Format, d.h. er übernimmt Zeichen(ketten) unkonvertiert in den Objekt-Code.

LITERAL-ENCODING=*EBCDIC-FULL hat somit dieselbe Wirkung wie LITERAL-ENCODING=*EBCDIC oder LITERAL-ENCODING=*NATIVE

Voraussetzungen:

  • Bei Nutzung der ASCII-Darstellung für Zeichen und Zeichenketten dürfen Sie die C-Bibliotheksfunktionen in Ihrem Quellprogramm nicht explizit deklarieren, sondern nur indirekt via Inkludieren des entsprechenden CRTE-Headers. Andernfalls kann es zum Übersetzungsfehler ‘CFE1079[ERROR]..: Typangabe erwartet / expected a type specifier‘ kommen.

  • Falls die Option ASCII oder ASCII_FULL gewählt wird: Inkludieren Sie für jede in Ihrem Programm verwendete CRTE-Funktion (C-Bibliotheksfunktion), die mit Zeichen(ketten) arbeitet, die passende bzw. dazugehörige Include-Datei. Andernfalls können diese Funktionen Zeichenketten nicht korrekt verarbeiten. Insbesondere müssen Sie für die Funktion printf() die Include-Datei <stdio.h> mit #include <stdio.h> inkludieren.

    Im Laufzeitsystem CRTE gibt es einige C-Bibliotheksfunktionen, die mit ASCII-Zeichenketten arbeiten.

    Für die Verwendung von ASCII-Zeichenketten sollte die MODIFY-SOURCE-PROPERTIES-Anweisung wie folgt angegeben werden:

    MODIFY-SOURCE-PROPERTIES           -
       ...
       LITERAL-ENCODING=ASCII[-FULL]  -
       ...
    

    Außerdem muss die MODIFY-MODULE-PROPERTIES-Anweisung mit folgenden Angaben spezifiziert werden:

    MODIFY-MODULE-PROPERTIES           - 
       ...
       LOWER-CASE-NAMES=*YES,          -
       SPECIAL-CHARACTERS=*KEEP,       -
       ...
    

Achtung:

C++ Bibliotheksfunktionen unterstützen das ASCII-Format nicht und müssen deshalb gegebenenfalls durch C-Funktionen ersetzt werden.

C++-spezifische Frontend-Optionen

INSTANTIATION = *UNCHANGED / *NONE / *AUTO / *LOCAL / *ALL

Diese Option ist nur für die Modi C++ V3, C++ 2017 und C++ 2020 relevant. Sie steuert die Art der Instanziierung von Templates mit externer Linkage. Dazu zählen Funktions-Templates sowie Funktionen und statische Variablen, die Elemente von Klassen-Templates sind. Im Folgenden werden diese Arten von Templates unter dem Begriff „Template-Einheiten“ zusammengefasst.

In allen Instanziierungsmodi generiert der Compiler pro Übersetzungseinheit alle Instanzen, die mit der expliziten Instanziierungsanweisung template declaration oder mit dem Instanziierungspragma #pragma instantiate template-einheit angefordert werden.

Die restlichen Template-Einheiten werden wie folgt instanziiert:

*NONE: Außer den explizit angeforderten Instanzen werden sonst keine Instanzen generiert.

*AUTO (Voreinstellung): Die Instanziierung erfolgt über alle Übersetzungseinheiten hinweg durch einen Prälinker. Der Prälinker wird erst mit der BIND-Anweisung aktiviert (siehe "BIND"). Das Prinzip der automatischen Instanziierung ist ausführlich im Abschnitt „Automatische Instanziierung“ dargestellt.

*LOCAL: Die Instanziierungen werden pro Übersetzungseinheit durchgeführt.
Es werden alle Template-Einheiten instanziiert, die in einer Übersetzungseinheit benutzt werden. Dabei generierte Funktionen haben interne Linkage. Dadurch wird ein sehr einfacher Mechanismus für den Einstieg in die Template-Programmierung zur Verfügung gestellt. Der Compiler instanziiert die Funktionen, die in jeder Übersetzungseinheit benötigt werden, als lokale Funktionen. Das Programm bindet sie und läuft korrekt ab. Durch diese Methode entsteht jedoch eine Vielzahl von Kopien der instanziierten Funktionen und ist daher für die Produktion nicht empfehlenswert. Dieser Modus ist aus den gleichen Gründen nicht geeignet, wenn eines der Templates static-Variablen enthält.

Achtung:

Das basic_string-Template enthält eine static-Variable, um die leere Zeichenkette darzustellen. Wenn Sie die Option *LOCAL und aus der Bibliothek den Typ string verwenden, wird die leere Zeichenkette nicht mehr erkannt. Bitte vermeiden Sie diese Kombination, weil sie zu ernsthaften Problemen führen kann.

*ALL: Die Instanziierungen werden pro Übersetzungseinheit durchgeführt.
Es werden alle Template-Einheiten instanziiert, die in einer Übersetzungseinheit benutzt oder deklariert werden. Alle Elementfunktionen und statischen Variablen eines Klassen-Templates werden unabhängig davon instanziiert, ob sie benutzt werden oder nicht. Funktions-Templates werden auch dann instanziiert, wenn sie lediglich deklariert werden.

USE-STD-NAMESPACE = *UNCHANGED / *YES / *NO

Diese Option betrifft den Gebrauch der C++-Bibliotheksfunktionen, deren Namen alle im Standard-Namensraum std definiert sind.

*YES ist die Voreinstellung im erweiterten C++ V3-Modus. Das Verhalten ist dann so, als ob am Beginn einer Übersetzungseinheit die folgenden Zeilen stehen würden:

namespace std{}
using namespace std;

*NO ist die Voreinstellung im strikten C++ V3-Modus, im C++ 2017-Modus und im C++ 2020-Modus und das einzig mögliche Verhalten im Cfront-C++-Modus.

Wenn im C++ V3-Modus, im C++ 2017 Modus oder im C++ 2020-Modus USE-STD-NAMESPACE=*NO gesetzt ist, muss das Quellprogramm vor dem ersten Gebrauch einer C++-Bibliotheksfunktion die Anweisung using namespace std; enthalten oder die Namen entsprechend qualifizieren.

KEYWORD-BOOL = *UNCHANGED / *YES / *NO 

Mit dieser Option wird festgelegt, ob bool als Schlüsselwort erkannt wird.

*YES ist die Voreinstellung im C++ V3-Modus und das einzig mögliche Verhalten im C++ 2017-Modus und im C++ 2020-Modus. In diesem Fall wird das Präprozessor-Makro _BOOL definiert.

*NO ist die Voreinstellung und das einzig mögliche Verhalten im Cfront-C++-Modus.

KEYWORD-WCHAR = *UNCHANGED / *YES / *NO

Mit dieser Option wird festgelegt, ob wchar_t als Schlüsselwort erkannt wird.

*YES ist die Voreinstellung im C++ V3-Modus und das einzig mögliche Verhalten im C++ 2017-Modus und im C++ 2020-Modus. In diesem Fall wird das Präprozessor-Makro _WCHAR_T definiert.

*NO ist die Voreinstellung und das einzig mögliche Verhalten im Cfront-C++-Modus.

LOOP-INIT = *UNCHANGED / *OLD / *NEW

Mit dieser Option wird festgelegt, wie eine Initialisierungsanweisung in for- und while-Schleifen behandelt werden soll.

*OLD ist die Voreinstellung im Cfront-C++-Modus und bewirkt, dass eine Initialisierungsanweisung zum selben Gültigkeitsbereich wie die gesamte Schleife gehört.

*NEW ist die Voreinstellung im C++ V3-Modus und das einzig mögliche Verhalten im C++ 2017-Modus und im C++ 2020-Modus. Die Angabe spezifiziert die neue ANSI-C++konforme Gültigkeitsbereichsregel, die die gesamte Schleife mit ihrem eigenen implizit generierten Gültigkeitsbereich umgibt.

SPECIALIZATION = *UNCHANGED / *OLD / *NEW

Diese Option ist nur im C++ V3-Modus, im C++ 2017-Modus und im C++ 2020-Modus relevant und legt fest, ob für Template-Spezialisierungen die neue Syntax template<> verpflichtend ist.

*NEW ist die Voreinstellung im C++ V3-Modus und das einzig mögliche Verhalten im C++ 2017-Modus und im C++ 2020-Modus. In diesem Fall wird das Makro __OLD_SPECIALIZATION_SYNTAX vom Compiler nicht definiert.

Bei der Angabe von *OLD definiert der Compiler das Makro __OLD_SPECIALIZATION_SYNTAX implizit mit dem Wert 1.