#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
#line
digit-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, bleibt der vorherige Dateiname unverändert.
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__ );}