Line dyrektywy (C/C++)
#line Informuje, dyrektywy preprocesora, aby zmienić numer wiersza wewnętrznie przechowywane przez kompilator i nazwę pliku na danej linii, numer i nazwę pliku.
#line digit-sequence ["filename"]
Uwagi
Kompilator używa numeru wiersza i opcjonalna nazwa pliku do odwoływania się do błędów, które stwierdzi podczas kompilacji.Numer wiersza zazwyczaj odnosi się do bieżącego wiersza wejściowego i nazwę pliku odnosi się do bieżącego pliku wejściowego.Numer wiersza jest zwiększany po każdej linii jest przetwarzane.
Sekwencji cyfrowej wartość może być dowolnym stała całkowita.Zastąpienie makra mogą być wykonane na wstępne przetwarzanie tokeny, ale wynik musi dawać w wyniku poprawnej składni.Nazwę pliku może być dowolną kombinacją znaków i musi być ujęty w znaki podwójnego cudzysłowu ("").Jeśli nazwę pliku jest pominięty, nazwa poprzedniego pliku pozostaje niezmieniony.
Można zmienić numer wiersza źródła i nazwy pliku, pisząc #line dyrektywy.Translator używa numeru wiersza i nazwę pliku do określenia wartości wstępnie zdefiniowanego makra __FILE__ i __LINE__.Korzystanie z tych makr, można wstawić self-descriptive komunikatami tekstu program.Aby uzyskać więcej informacji na te wstępnie zdefiniowane makr, zobacz Wstępnie zdefiniowanego makra.
__FILE__ makro rozwija się ciąg znaków, których zawartość jest nazwa pliku, ujęte w podwójne cudzysłowy ("").
Jeśli zostanie zmieniony numer wiersza i nazwę pliku, kompilator ignoruje wartości poprzednich i kontynuuje przetwarzanie nowymi wartościami.#line Dyrektywy jest zwykle stosowane przez program generatory powodować komunikaty o błędach odwołać się do oryginalnego pliku źródłowego zamiast do programu wygenerowany.
Poniższe przykłady ilustrują #line i __LINE__ i __FILE__ makr.
W tej instrukcji numer wiersza wewnętrznie przechowywane jest ustawiony na 151 i nazwa pliku jest zmieniana na copy.c.
#line 151 "copy.c"
W tym przykładzie makro ASSERT używa wstępnie zdefiniowanego makra __LINE__ i __FILE__ do drukowania komunikat o błędzie dotyczący pliku źródłowego, jeśli dany "potwierdzenie" nie jest spełniony.
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}