Namensräume
Varianten
Aktionen

Dateiname und Zeileninformationen

Von cppreference.com
 
 
C++ Sprache
Allgemeine Themen
Kontrollfluss
Bedingte Ausführungsaussagen
if
Iterationsanweisungen (Schleifen)
for
Bereichs-for (C++11)
Sprunganweisungen
Funktionen
Funktionsdeklaration
Lambda-Funktionsausdruck
inline-Spezifizierer
Dynamische Ausnahmespezifikationen (bis C++17*)
noexcept-Spezifizierer (C++11)
Ausnahmen
Namensräume
Typen
Spezifizierer
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Speicherdauer-Spezifizierer
Initialisierung
Ausdrücke
Alternative Darstellungen
Literale
Boolesch - Ganzzahl - Gleitkommazahl
Zeichen - String - nullptr (C++11)
Benutzerdefinierte (C++11)
Dienstprogramme
Attribute (C++11)
Typen
typedef-Deklaration
Typalias-Deklaration (C++11)
Umwandlungen
Speicherzuweisung
Klassen
Klassenspezifische Funktionseigenschaften
explicit (C++11)
static

Spezielle Member-Funktionen
Templates
Sonstiges
 
 

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

Inhalt

[bearbeiten] Syntax

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

[bearbeiten] Erklärung

1) Ändert die aktuelle Präprozessor-Zeilennummer auf lineno. Makroexpansionen von __LINE__ werden von diesem Punkt an lineno plus die Anzahl der seitdem aufgetretenen tatsächlichen Quellcodezeilen ergeben.

2) Ändert auch den aktuellen Präprozessor-Dateinamen auf filename. Makroexpansionen von __FILE__ ergeben von diesem Punkt an filename.

Präprozessor-Tokens (Makrokonstanten oder -ausdrücke) sind als Argumente für #line zulässig, solange sie sich zu einer gültigen Dezimalzahl entwickeln, optional gefolgt von einer gültigen Zeichenkette.

lineno muss eine Sequenz von mindestens einer Dezimalziffer sein (andernfalls ist das Programm fehlerhaft) und wird immer dezimal interpretiert (auch wenn es mit 0 beginnt).

Wenn lineno 0 ist oder größer als 32767(bis C++11)2147483647(seit C++11), ist das Verhalten undefiniert.

[bearbeiten] Hinweise

Diese Direktive wird von einigen automatischen Codegenerierungswerkzeugen verwendet, die C++-Quelldateien aus einer Datei in einer anderen Sprache erstellen. In diesem Fall können #line-Direktiven in die generierte C++-Datei eingefügt werden, die sich auf Zeilennummern und den Dateinamen der ursprünglichen (menschenlesbaren) Quelldatei beziehen.

[bearbeiten] 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.

[bearbeiten] 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]

[bearbeiten] Siehe auch

eine Klasse, die Informationen über den Quellcode darstellt, wie z. B. Dateinamen, Zeilennummern und Funktionsnamen
(Klasse) [edit]
C-Dokumentation für Dateiname und Zeileninformationen