#line

Die #line-Direktive beeinflusst die vordefinierten Konstanten __LINE__ und __FILE__. Normalerweise geben diese Konstanten an, an welcher Zeile und in welcher Datei sich der Compiler gerade befindet. Mit der #line-Direktive können diese Werte explizit geändert werden. Vom Gebrauch der #line-Direktive wird im Allgemeinen abgeraten, falsche Zeilen und Dateiangaben können die Fehlersuche erheblich erschweren.

#include <stdio.h> int main(int argc, char** argv){ printf("Line: %d, File: %s\n", __LINE__, __FILE__); #line 999 "somefile.h" printf("Line: %d, File: %s\n", __LINE__, __FILE__); return 0; }

Line: 4, File: test.cpp Line: 999, File: somefile.h

Details

Der Dateiname wird als vollständiger Pfad ausgegeben. Er wurde hier jedoch auf den Dateinamen gekürzt, der Übersichtlichkeit wegen.

Der Sinn dieser Direktive liegt darin, dem Programmierer Hinweise zu geben, welche Datei er konsultieren soll. Dies ist besonders dann der Fall, wenn veraltete Dateien eingebunden werden, die auf neue Dateien verweisen. Die Verwendung der #line-Direktive wird jedoch hinfällig aufgrund der guten Dokumentation von APIs, sowie der verbesserten Intelligenz heutiger Compiler, welche meistens imstande sind, die korrekten Stellen aufzufinden.

Für die Zeilennummer können auch Makros angegeben werden:

#define LINENUM 123 #line LINENUM printf("Line: %d\n", __LINE__);

123

Um dem Preprozessor somit beizubringen, nur die __FILE__-Konstante zu ändern, benutzt man einfach folgendes Konstrukt:

#line __LINE__ "anotherfile.h" printf("Line: %d, File: %s\n", __LINE__, __FILE__);

Line: 124, File: anotherfile.h

Die Zeilennummern zählen nach dem Auftreten der #line-Direktive schrittweise ab der angegebenen Zeile weiter:

#line 99 printf("Line: %d\n", __LINE__); printf("Line: %d\n", __LINE__);

99 100