Sdílet prostřednictvím


direktiva #line (C/C++)

Direktiva #line říká preprocesoru, aby nastavil hlášené hodnoty kompilátoru pro číslo řádku a název souboru na dané číslo řádku a název souboru.

Syntaxe

#linedigit-sequence ["název_souboru"]

Poznámky

Kompilátor používá číslo řádku a volitelný název souboru pro odkazování na chyby, které zjistí během kompilace. Číslo řádku obvykle odkazuje na aktuální vstupní řádek a název souboru odkazuje na aktuální vstupní soubor. Číslo řádku se zvyšuje po zpracování každého řádku.

Hodnota sekvence číslic může být libovolná celočíselná konstanta v rozsahu od 0 do 2147483647 včetně. Nahrazení makra lze použít u tokenů předběžného zpracování, ale výsledek musí být vyhodnocen jako správná syntaxe. Název souboru může být libovolná kombinace znaků a musí být uzavřen v uvozovkách (" "). Pokud je název souboru vynechán, předchozí název souboru zůstane beze změny.

Číslo a název souboru zdrojového řádku můžete změnit napsáním direktivy #line . Direktiva #line nastaví hodnotu pro řádek, který bezprostředně následuje za direktivou ve zdrojovém souboru. Translator používá číslo řádku a název souboru k určení hodnot předdefinovaných maker __FILE__ a __LINE__. Makra je možné použít k vložení samopopisných chybových zpráv do textu programu. Další informace o těchto předdefinovaných makrech najdete v předdefinovaných makrech.

Makro __FILE__ se rozbalí na řetězec, jehož obsah je název souboru obklopený dvojitými uvozovkami (" ").

Při změně čísla řádku a názvu souboru ignoruje kompilátor předchozí hodnoty a pokračuje ve zpracování s novými hodnotami. Direktiva #line se obvykle používá generátory programů. Slouží k tomu, aby chybové zprávy odkazovaly na původní zdrojový soubor místo na vygenerovaný program.

Příklad

Následující příklady znázorňují #line a __LINE____FILE__ makra.

V prvním příkladu je číslo řádku nastaveno na 10, pak na 20 a název souboru se změní na hello.cpp.

// 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

V tomto příkladu makro ASSERT používá předdefinovaná makra __LINE__ a __FILE__ k vytištění chybové zprávy o zdrojovém souboru, pokud daný kontrolní výraz není pravdivý.

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

Viz také

Direktivy preprocesoru