Share via


#line-Anweisung (C/C++)

Die #line Direktive weist den Präprozessor an, die gemeldeten Werte des Compilers für die Zeilennummer und den Dateinamen auf eine angegebene Zeilennummer und einen Dateinamen festzulegen.

Syntax

#linedigit-sequence ["filename"]

Hinweise

Der Compiler verwendet die Zeilennummer und den optionalen Dateinamen, um auf Fehler zu verweisen, die während der Kompilierung gefunden werden. Die Zeilennummer verweist normalerweise auf die aktuelle Eingabezeile, und der Dateiname verweist auf die aktuelle Eingabedatei. Nach der Verarbeitung jeder Zeile wird die Zeilennummer erhöht.

Der Wert der Ziffernfolge kann eine beliebige ganze Zahl innerhalb des Bereichs von 0 bis einschließlich 2147483647 sein. Makroersatz kann für die Vorverarbeitungstoken verwendet werden, das Ergebnis muss jedoch zur richtigen Syntax ausgewertet werden. Der Dateiname kann eine beliebige Kombination von Zeichen sein und muss in doppelte Anführungszeichen (" ") eingeschlossen werden. Wenn der Dateiname nicht angegeben wird, wird der vorherige Dateiname unverändert Standard.

Sie können die Quellzeilennummer und den Dateinamen ändern, indem Sie eine #line Direktive schreiben. Die #line Direktive legt den Wert für die Zeile fest, die unmittelbar auf die Direktive in der Quelldatei folgt. Der Übersetzer verwendet die Zeilennummer und den Dateinamen, um die Werte der vordefinierten Makros und __LINE__des Dateinamens __FILE__ zu bestimmen. Sie können diese Makros verwenden, um selbsterklärende Fehlermeldungen in den Programmtext einzufügen. Weitere Informationen zu diesen vordefinierten Makros finden Sie unter Vordefinierte Makros.

Das __FILE__ Makro wird auf eine Zeichenfolge erweitert, deren Inhalt der Dateiname ist, umgeben von doppelten Anführungszeichen (" ").

Wenn Sie die Zeilennummer und den Dateinamen ändern, ignoriert der Compiler die vorherigen Werte und setzt die Verarbeitung mit den neuen Werten fort. Die #line Direktive wird in der Regel von Programmgeneratoren verwendet. Es wird verwendet, um Fehlermeldungen auf die ursprüngliche Quelldatei anstatt auf das generierte Programm zu verweisen.

Beispiel

Die folgenden Beispiele veranschaulichen #line und die __LINE__ Makros __FILE__ .

Im ersten Beispiel wird die Zeilennummer auf 10 und dann auf 20 festgelegt, und der Dateiname wird in "hello.cpp" geändert.

// line_directive.cpp
// Compile by using: cl /W4 /EHsc line_directive.cpp
#include <stdio.h>

int main()
{
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 10
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 20 "hello.cpp"
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
}
This code is on line 7, in file line_directive.cpp
This code is on line 10, in file line_directive.cpp
This code is on line 20, in file hello.cpp
This code is on line 21, in file hello.cpp

In diesem Beispiel verwendet das Makro ASSERT die vordefinierten Makros __LINE__ und __FILE__ gibt eine Fehlermeldung über die Quelldatei aus, wenn eine bestimmte Assertion nicht wahr ist.

#define ASSERT(cond) if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}

Siehe auch

Präprozessoranweisungen