Namespaces
Variants

Filename and line information

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Ändert die Zeilennummer des Quellcodes und optional den aktuellen Dateinamen im Präprozessor.

Inhaltsverzeichnis

Syntax

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

Erklärung

1) Ändert die aktuelle Präprozessor-Zeilennummer zu lineno . Erweiterungen des Makros __LINE__ nach diesem Punkt werden zu lineno plus der Anzahl der tatsächlich seitdem angetroffenen Quellcode-Zeilen erweitert.

2) Ändert auch den aktuellen Präprozessor-Dateinamen zu filename . Erweiterungen des Makros __FILE__ ab diesem Punkt werden filename erzeugen.

Jede Präprozessor-Token (Makrokonstanten oder Ausdrücke) sind als Argumente 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 (das Programm ist andernfalls fehlerhaft) und wird stets als Dezimalzahl interpretiert (selbst wenn es mit 0 beginnt).

Wenn lineno gleich 0 oder größer als 32767 (bis C++11) 2147483647 (seit C++11) 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.

Beispiel

#include <cassert>
#define FNAME "test.cc"
int main()
{
#line 777 FNAME
        assert(2+2 == 5);
}

Mögliche Ausgabe:

test: test.cc:777: int main(): Assertion `2+2 == 5' failed.

Referenzen

  • C++23-Standard (ISO/IEC 14882:2024):
  • 15.7 Zeilensteuerung [cpp.line]
  • C++20 Standard (ISO/IEC 14882:2020):
  • 15.7 Zeilensteuerung [cpp.line]
  • C++17-Standard (ISO/IEC 14882:2017):
  • 19.4 Zeilensteuerung [cpp.line]
  • C++14-Standard (ISO/IEC 14882:2014):
  • 16.4 Zeilensteuerung [cpp.line]
  • C++11 Standard (ISO/IEC 14882:2011):
  • 16.4 Zeilensteuerung [cpp.line]
  • C++98-Standard (ISO/IEC 14882:1998):
  • 16.4 Zeilensteuerung [cpp.line]

Siehe auch

eine Klasse, die Informationen über den Quellcode repräsentiert, wie Dateinamen, Zeilennummern und Funktionsnamen
(Klasse)
C-Dokumentation für Dateinamen- und Zeileninformationen