Dateiname und Zeileninformationen
Ändert die aktuelle Zeilennummer und den Dateinamen im Präprozessor.
Inhalt |
[bearbeiten] Syntax
#line lineno |
(1) | ||||||||
#line lineno "filename" |
(2) | ||||||||
[bearbeiten] Erklärung
Jede Präprozessor-Token (Makrokonstanten oder -ausdrücke) sind als Argumente für #line zulässig, solange sie zu einer gültigen Dezimalzahl expandieren, der optional ein gültiger Zeichenstring folgt.
lineno muss eine Sequenz von mindestens einer Dezimalziffer sein (andernfalls ist das Programm fehlerhaft) und wird immer als Dezimalzahl interpretiert (auch wenn sie mit 0 beginnt).
Wenn lineno 0 ist oder größer als 32767(bis C99)2147483647(seit C99), ist das Verhalten undefiniert.
[bearbeiten] Anmerkungen
Diese Direktive wird von einigen automatischen Codegenerierungswerkzeugen verwendet, die C-Quelldateien aus einer Datei in einer anderen Sprache erzeugen. In diesem Fall können #line-Direktiven in die generierte C-Datei eingefügt werden, die auf Zeilennummern und den Dateinamen der ursprünglichen (menschenlesbaren) Quelldatei verweisen.
Die Zeilennummer, die der Direktive #line __LINE__ folgt, ist nicht spezifiziert (es gibt zwei mögliche Werte, zu denen __LINE__ in diesem Fall expandieren kann: die bisher gesehene Anzahl von Zeilenumbrüchen oder die bisher gesehene Anzahl von Zeilenumbrüchen plus der Zeilenumbruch, der die #line-Direktive abschließt). Dies ist das Ergebnis von DR 464, die rückwirkend gilt.
[bearbeiten] Beispiel
#include <assert.h> #define FNAME "test.c" int main(void) { #line 777 FNAME assert(2+2 == 5); }
Mögliche Ausgabe
test: test.c:777: int main(): Assertion `2+2 == 5' failed.
[bearbeiten] Referenzen
- C17-Standard (ISO/IEC 9899:2018)
- 6.10.4 Zeilensteuerung (S. 126)
- J.1 Undefiniertes Verhalten
- C11-Standard (ISO/IEC 9899:2011)
- 6.10.4 Zeilensteuerung (S. 173)
- C99-Standard (ISO/IEC 9899:1999)
- 6.10.4 Zeilensteuerung (S. 158)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 3.8.4 Zeilensteuerung
[bearbeiten] Siehe auch
| C++-Dokumentation für Datum- und Zeileninformationen
|