Namespaces
Variants

Filename and line information

From cppreference.net

Ändert die aktuelle Zeilennummer und den Dateinamen im Präprozessor.

Inhaltsverzeichnis

Syntax

#line lineno (1)
#line lineno " filename " (2)

Erklärung

1) Ändert die aktuelle Präprozessor-Zeilennummer zu lineno . Vorkommen des Makros __LINE__ nach diesem Punkt werden zu lineno plus der Anzahl der tatsächlich seitdem angetroffenen Quellcode-Zeilen expandiert.
2) Ändert ebenfalls den aktuellen Präprozessor-Dateinamen zu filename . Vorkommen des Makros __FILE__ ab diesem Punkt werden filename erzeugen.

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