Der Compiler gibt folgende Arten von Meldungen aus:
Informationsmeldungen, die den Benutzer über den allgemeinen Ablauf der Übersetzung informieren (z.B. Start- und Beendigungsmeldung des Compilers, Meldungen wie ’MODULES GENERATED’).
Fehlermeldungen des Compiler-Frontends, die sich direkt auf das übersetzte Quellprogramm beziehen (z.B. Syntax- und Semantikfehler).
Diese bestehen aus
der eigentlichen Fehlermeldungszeile
der fehlerhaften Quellprogrammzeile (optional)
einer Markierung ^ der Fehlerposition (optional)
Fehlermeldungen ohne Quellprogrammbezug (z.B. Platte voll, erfolgloses Öffnen von Dateien).
Informations- und Fehlermeldungen werden - steuerbar über die MODIFY-DIAGNOSTIC-PROPERTIES-Anweisung ("MODIFY-DIAGNOSTIC-PROPERTIES") - während der Übersetzung auf eines oder mehrere der folgenden Ausgabeziele ausgegeben:
Datensichtstation und/oder
wahlweise in Dateien oder Bibliotheken.
Fehlermeldungen mit Quellprogrammbezug werden auch - steuerbar über die MODIFY-LISTING-PROPERTIES-Anweisung ("MODIFY-LISTING-PROPERTIES") - in der Quellprogramm-/Fehlerliste dokumentiert.
Allgemeines Format der Compilermeldungen:
Fehlermeldungszeile: meldungsschlüssel optional bei Fehlermeldungen mit Quellprogrammbezug: fehlerhafte Quellprogramzeile ^ Markierung der Fehlerposition |
Bei Fehlermeldungen ohne Quellprogrammbezug (Gewicht FATAL oder ERROR) entfallen Dateiname und Zeilennummer. Bei den Informationsmeldungen entfällt außerdem das Fehlergewicht.
meldungsschlüssel
Der 7-stellige Meldungsschlüssel setzt sich zusammen aus einer 3-stelligen Meldungsklasse, die die Compilerkomponente kennzeichnet, und einer 4-stelligen Meldungsnummer.
Meldungsklasse | Komponente |
CFE | Frontend des Compilers: |
CDR | Compilertreiber, II-UPDATE |
UMP | Zwischensprachenkomponenten: ULS, Optimierer, Inliner |
BEM | Backend |
SIS | Compiler-Ein-/Ausgabe-Schnittstelle (PROSOS), |
BND | BINDER (beim Binden mit der BIND-Anweisung des Compilers) |
CCM | C-Laufzeitsystem |
[fehlergewicht]
Angabe, welches Gewicht der aufgetretene Fehler hat:
[NOTE] | Hinweise, leichte Fehler, z.B. „unschöne“ oder überflüssige Konstrukte, die auf das spätere Programmverhalten in der Regel keinen Einfluss haben. |
[WARNING] | Fehler, bei denen der Compiler zwar ein Modul erzeugt, jedoch ggf. Annahmen trifft, die nicht zum erwarteten Programmverhalten führen |
[ERROR], | Fehler, bei denen kein Modul erzeugt wird. Der Compiler versucht, bis zu der mit der Option |
[FATAL] | Schwerer Fehler, der zum Abbruch der Übersetzung führt |
[INTERNAL] | Compilerfehler, der ebenfalls zum Abbruch der Übersetzung führt |
dateiname
Name der Datei oder des Bibliothekselementes mit dem fehlerhaften Quellprogrammcode
zeilennummer
Angabe der Quellprogrammzeile, in der der Fehler auftritt
meldungstext
Text der Fehlermeldung, der in Deutsch oder Englisch ausgegeben werden kann
Fehlerhafte Quellprogrammzeile mit Markierung der Fehlerposition
Bei Angabe der Option -R show_column
bzw. SHOW-COLUMN=*YES (Voreinstellung) wird zusätzlich zur Diagnosemeldung die fehlerhafte Original-Quellprogrammzeile ausgegeben, in der die Fehlerstelle markiert ist (mit ^
). Die Ausgabe der markierten Quellprogrammzeile kann mit -R no_show_column
bzw. SHOW-COLUMN=*NO unterdrückt werden.
Beispiel
//MODIFY-SOURCE-PROP LANG=*C(MODE=1990, STRICT=*YES) //MODIFY-DIAGNOSTIC-PROP CHANGE-MSG-WEIGHT=*ERROR(CFE1064) //COMPILE SOURCE=TEST.C % CFE1064 [*ERROR]: TEST.C / 1: declaration does not declare anything struct { int a; }; ^ % CFE1020 [ERROR]: TEST.C / 3: identifier "abc" is undefined abc def; ^ % CFE2095 [*ERROR]: USER.H / 3: too few arguments in invocation of macro "M" int i = M(3); ^
Die Fehlernummer CFE1064 ist im Original ein WARNING und wurde mit der Option CHANGE-MSG-WEIGHT=*ERROR(CFE1064) auf die Fehlerklasse ERROR hochgestuft. Die Fehlerklasse von Errors, die im Original nicht mit einem Stern ausgegeben werden (hier z.B. CFE1020), kann nicht verändert werden.
Die Fehlernummer CFE2095 ist ein Beispiel für einen im strikten C89-Modus generierten Error, der mit CHANGE-MSG-WEIGHT=*WARNING(CFE2095) herabgestuft werden kann. Die gleiche Fehlernummer hat im erweiterten C89-Modus die Fehlerklasse WARNING.
Zu etlichen Fehlermeldungen kann mit dem HELP-MSG-Kommando eine nähere Erläuterung abgerufen werden:
HELP-MSG MSG-ID=
msgid[,LANGUAGE=D
/ E
]
Die Compilermeldungen können in deutsch oder englisch ausgegeben werden. Der Standardwert hängt von der Systemgenerierung ab. Mit folgendem Kommando kann die taskspezifische Voreinstellung geändert werden:
MODIFY-MSG-ATTRIBUTES TASK-LANGUAGE = D / E