Filename and line information
Ändert die aktuelle Zeilennummer und den Dateinamen im Präprozessor.
Inhaltsverzeichnis |
Syntax
#line
lineno
|
(1) | ||||||||
#line
lineno
"
filename
"
|
(2) | ||||||||
Erklärung
Jede Präprozessor-Token (Makrokonstanten oder Ausdrücke) ist als Argument für #line zulässig, solange sie zu einer gültigen dezimalen Ganzzahl erweitert werden, der optional eine gültige Zeichenkette folgt.
lineno
muss eine Folge von mindestens einer Dezimalziffer sein (ansonsten ist das Programm fehlerhaft) und wird immer als Dezimalzahl interpretiert (selbst wenn sie mit
0
beginnt).
Wenn
lineno
gleich
0
oder größer als
32767
(bis C99)
2147483647
(seit C99)
ist, ist das Verhalten undefiniert.
Hinweise
Diese Direktive wird von einigen automatischen Codegenerierungswerkzeugen verwendet, die C-Quelldateien aus einer in einer anderen Sprache geschriebenen Datei 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 (durch Menschen bearbeitbaren) Quelldatei verweisen.
Die Zeilennummer nach der Direktive #line __LINE__ ist nicht spezifiziert (es gibt zwei mögliche Werte, auf die __LINE__ in diesem Fall expandieren kann: die Anzahl der bisher gesehenen Zeilenumbrüche oder die Anzahl der bisher gesehenen Zeilenumbrüche plus den Zeilenumbruch, der die #line -Direktive beendet). Dies ist das Ergebnis von DR 464 , das rückwirkend angewendet wird.
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.
Referenzen
- C17-Standard (ISO/IEC 9899:2018):
-
- 6.10.4 Zeilensteuerung (S: 126)
-
- J.1 Nicht spezifiziertes 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
Siehe auch
|
C++ Dokumentation
für
Dateinamen- und Zeileninformation
|