-K
arg1[,arg2...]
Allgemeine Eingaberegeln zur -K
-Option finden Sie im Abschnitt "Aufruf-Syntax und allgemeine Regeln".
Als Argumente arg zur Objektgenerierung sind folgende Angaben möglich:
Assembler-Befehle für Unterprogrammeinsprünge
subcall_basr
subcall_lab
-K subcall_basr
(Voreinstellung)
Standardmäßig wird der Befehl BASR generiert.
-K subcall_lab
Es werden die prozessorunabhängigen Assembler-Befehle LA und B generiert. Programme mit dieser Befehlsfolge sind auf allen 7500-Anlagen ablauffähig.
Achtung: Diese Option ist in den Modi C++V3, C++ 2017 und C++ 2020 nicht erlaubt.
Generierung des ETPND-Bereichs
Mit den folgenden Optionen wird die #pragma
-Anweisung zur Erzeugung eines ETPND-Bereichs (siehe Abschnitt „ETPND-Pragma“ im C/C++-Benutzerhandbuch [4]) ignoriert bzw. das Datum-Format des ETPND-Bereichs festgelegt.
no_etpnd
calendar_etpnd
julian_etpnd
-K no_etpnd
(Voreinstellung)
Standardmäßig wird kein ETPND-Bereich generiert.
-K calendar_etpnd
Das Format des Datums im ETPND-Bereich wird wie folgt festgelegt: 8 Byte Kalenderdatum - 4 Byte Ladeadresse.
-K julian_etpnd
Das Format des Datums im ETPND-Bereich wird wie folgt festgelegt: 6 Byte Kalenderdatum - 3 Byte julianisches Datum - 4 Byte Ladeadresse.
Generierung des Entry-Codes für Funktionsaufrufe
ilcs_opt
ilcs_out
-K ilcs_opt
(Voreinstellung)
Der ILCS-Entry-Code wird inline generiert. Die Laufzeit des erzeugten Objektes wird beschleunigt.
-K ilcs_out
Der ILCS-Entry-Code für Funktionsaufrufe wird im Laufzeitsystem angesprungen. Dadurch reduziert sich das Code-Volumen des Moduls.
Behandlung von enum-Daten
enum_value
enum_long
-K enum_value
(Voreinstellung)
Standardmäßig werden die enum
-Daten abhängig vom Wertebereich auf char
, short
oder long
abgebildet.
-K enum_long
enum
-Daten werden immer wie Objekte vom Typ long
behandelt.
Generierung der Entry-Namen bei LLMs
llm_convert
llm_keep
-K llm_convert
(Voreinstellung)
Standardmäßig werden bei der Generierung von Entry-Namen Unterstriche in Dollarzeichen umgewandelt.
-K llm_keep
Bei der Generierung von Entry-Namen werden die Unterstriche beibehalten.
Die Umsetzung des Unterstrichs betrifft in den C-Sprachmodi alle externen Symbole, in den C++-Sprachmodi nur die mit extern "C"
deklarierten Symbole (nicht die Entry-Namen der C-Bibliotheksfunktionen). Bei der Kodierung von externen C++-Symbolen werden generell Unterstriche beibehalten.
no_llm_case_lower
llm_case_lower
-K no_llm_case_lower
(Voreinstellung)
Standardmäßig werden bei der Generierung von Entry-Namen Klein- in Großbuchstaben umgewandelt.
-K llm_case_lower
Bei der Generierung von Entry-Namen wird die Kleinschreibung beibehalten.
Die Umwandlung von Klein- in Großbuchstaben betrifft in den C-Sprachmodi und im Cfront-C++-Modus alle externen Symbole, in den Sprachmodi C++ 2017, C++ 2020 und C++ V3 nur die mit extern "C"
deklarierten Symbole. Bei der Codierung von externen C++-Symbolen in den Sprachmodi C++ 2017, C++ 2020 und C++ V3 werden generell Kleinbuchstaben beibehalten.
Achtung:
Die C-Bibliotheksfunktionen werden nur dann vollständig unterstützt, wenn eine der beiden folgenden Option-Kombinationen spezifiziert wurde:
-K llm_convert
und-K no_llm_case_lower
-K llm_keep
und-K llm_case_lower
csect_suffix=
suffix csect_hashpath
Diese Optionen spezifizieren die Art, in der CSECT-Namen gebildet werden. Standardmäßig wird der CSECT-Name vom Modulnamen abgeleitet und der Modulname wird – sofern nicht ausdrücklich spezifiziert – vom Quellnamen abgeleitet.
Die Optionen können genutzt werden, um unterschiedliche CSECT-Namen zu generieren, falls die Objektnamen dieselben sind.
Mithilfe beider Optionen entsteht eine 30 Zeichen lange Zeichenkette als Basis für die realen CSECT-Namen. Diese Basis kann mittels '-K verbose / -v'
angezeigt werden.
Die Basis wird wie üblich geändert durch:
umwandeln aller Kleinbuchstaben in Großbuchstaben
ändern aller Sonderzeichen wie z. B. ’_’ oder ’.’ nach ’$’
hinzufügen von ’&@’ oder ’&#’, um reale CSECT-Namen zu generieren.
Mithilfe dieser Optionen selektieren Sie unterschiedliche Suffixes, die an den Objektnamen angehängt werden. Wird der Objektname länger als 30 Zeichen (abzüglich der Suffixlänge), so wird er abgeschnitten.
-K csect_suffix=
Mit dieser Option spezifizieren Sie einen benutzerdefinierten Suffix. Es werden max. 10 Stellen benutzt.
-K csect_hashpath
Mit dieser Option wird aus dem vollen Objektpfadnamen (inklusive ’..’; Links werden nicht expandiert) eine Zeichenfolge von 7 Zeichen generiert. Diese Zeichenfolge wird als Suffix benutzt.
Ablage von const-Objekten
no_roconst
roconst
-K no_roconst
(Voreinstellung)
Standardmäßig werden Objekte vom Typ const
im Datenmodul abgelegt (WRITEABLE).
-K roconst
Objekte vom Typ const
werden im Codemodul (READ-ONLY) abgelegt. Die Konstanten können nicht überschrieben werden, auch wenn mit einem cast
-Operator das const
-Attribut entfernt wird.
Achtung: Nur globale oder lokale static
-Konstanten sind betroffen. Lokale auto
-Variablen mit dem Typattribut const
können nicht im READ-ONLY Bereich abgelegt werden.
Ablage von Zeichenketten-Konstanten
no_rostr
rostr
-K no_rostr
(Voreinstellung)
Standardmäßig werden Zeichenketten-Konstanten im Datenmodul abgelegt (WRITEABLE), so dass die Werte überschrieben werden können, sobald das const
-Attribut mit einem cast
-Operator gelöscht wurde.
-K rostr
Zeichenketten-Konstanten und Aggregat-Initialisierungskonstanten werden im Codemodul (READ-ONLY) abgelegt.
Gleitpunkt-Arithmetik im /390- und IEEE-Format
no_ieee_floats
ieee_floats
-K no_ieee_floats
(Voreinstellung)
Standardmäßig werden Gleitpunkt-Datentypen und -Operationen im /390-Format verwendet.
-K ieee_floats
Gleitpunkt-Datentypen und -Operationen werden im IEEE-Format verwendet. Dies betrifft alle Variablen und Konstanten der Datentypen float
, double
und long double
innerhalb eines C/C++-Programms.
Achtung:
Je nachdem, ob für Gleitpunkt-Datentypen und -Operationen das IEEE-Format oder das /390-Format verwendet wird, kann dasselbe C/C++-Programm aus folgenden Gründen unterschiedliche Ergebnisse liefern:
- IEEE-Gleitpunkt-Zahlen verwenden eine andere interne Darstellung als /390-Gleitpunkt-Zahlen.
- C++-Bibliotheksfunktionen unterstützen nicht das IEEE-Format und müssen deshalb gegebenenfalls durch C-Funktionen ersetzt werden.
- IEEE-Gleitpunkt-Operationen unterscheiden sich semantisch von den entsprechenden /390-Gleitpunkt-Operationen, z.B. beim Runden. So wird im IEEE-Format standardmäßig „Round to Nearest“ angewendet anstatt „Round to Zero“ wie beim /390-Format.
Voraussetzungen für die Verwendung des IEEE-Formats:
Inkludieren Sie für jede in Ihrem Programm verwendete CRTE-Funktion (C-Bibliotheksfunktion), die mit Gleitpunkzahlen arbeitet, die zugehörige Include-Datei. Andernfalls können diese Funktionen die Gleitpunktzahlen nicht korrekt verarbeiten. Insbesondere müssen Sie für die Funktion printf() die Include-Datei <stdio.h> mit
#include <stdio.h>
inkludieren.CRTE enthält einige C-Bibliotheksfunktionen, die das IEEE-Format für Gleitpunktzahlen verwenden. Für die korrekte Verwendung der IEEE-Funktionsnamen müssen Sie zusätzlich zur Option
ieee_floats
die beiden folgenden Optionen angeben:-K llm_keep
-K llm_case_lower
Generierung von gemeinsam benutzbarem Code
no_share
share
-K no_share
(Voreinstellung)
Standardmäßig erzeugt der Compiler keinen gemeinsam benutzbaren Code.
-K share
Der Compiler erzeugt gemeinsam benutzbaren Code, bestehend aus einer gemeinsam benutzbaren Code-CSECT und einer nicht gemeinsam benutzbaren Daten-CSECT. Module mit gemeinsam benutzbarem Code können nur in BS2000-Umgebung (SDF) sinnvoll weiterverarbeitet werden.
Ablage von Hilfsvariablen
workspace_static
workspace_stack
-K workspace_static
(Voreinstellung)
Standardmäßig werden Hilfsvariablen im statischen Datenbereich angelegt.
-K workspace_stack
Die für Hilfsvariablen benötigten Daten werden auf dem Stack abgelegt.
Mehrfachdefinition von extern sichtbaren Variablen
external_multiple
external_unique
-K external_multiple
Eine extern sichtbare Variable, die in mehreren Modulen definiert ist, wird nur genau einem Speicherbereich zugeordnet.
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. Wenn die Variable bei der Definition statisch initialisiert ist, wird der Speicher im Datenbereich angelegt. Die Zuordnung zu genau einem Speicherbereich ist dann nicht möglich.
Dieses Verhalten ist im K&R-C-Modus voreingestellt.
-K external_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. Dieses Verhalten ist in den Sprachmodi C89, C11 und in allen C++-Sprachmodi voreingestellt. In den C++-Sprachmodi darf diese Voreinstellung nicht geändert werden.
Länge von externen C-Namen
Die folgenden Optionen legen die Länge von externen C-Namen fest und betreffen in den C-Sprachmodi alle externen Symbole, in den C++-Sprachmodi nur die mit extern "C"
deklarierten Symbole (nicht die Entry-Namen der C-Bibliotheksfunktionen).
c_names_std
c_names_unlimited
c_names_short
-K c_names_std
(Voreinstellung)
Standardmäßig sind externe C-Namen maximal 32 Zeichen lang. Längere Namen werden vom Compiler auf 32 Zeichen verkürzt. Bei der Generierung von gemeinsam nutzbarem Code (-K share
) können nur 30 Zeichen genutzt werden.
-K c_names_unlimited
Es findet keine Namensverkürzung statt. Der Compiler generiert in diesem Fall Entry-Namen im EEN-Format. EEN-Namen können eine Länge von maximal 32000 Zeichen haben. Module, die EEN-Namen enthalten, werden vom Compiler im LLM-Format 4 abgelegt. Ausführliche Informationen zur Weiterverarbeitung von LLMs im Format 4 finden Sie im Abschnitt "Binder-Optionen" (-B extended_external_names
). EEN-Namen werden im Cfront-C++-Modus nicht unterstützt.
-K c_names_short
Externe C-Namen werden auf 8 Zeichen gekürzt.
Hinweis
Optionen, die die Länge von externen Namen beeinflussen, wirken auch auf die Namen von Static-Funktionen, da der Compiler Namen von Static-Funktionen wie die Namen von externen Funktionen behandelt.