#line – direktiva (C++)
Direktiva #line přikazuje preprocesoru, aby změnil interně uložená čísla řádků a název souboru kompilátoru na zadaná čísla řádků a název souboru.
#line digit-sequence ["filename"]
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 pořadové číslice může být jakákoli celočíselná konstanta.Nahrazení makrem lze provést u předzpracovaných tokenů, ale výsledek musí být vyhodnocen na správnou syntaxi.Název souboru může obsahovat libovolnou kombinaci znaků a musí být uzavřen do dvojitých uvozovek ("").Pokud je argument názvu souboru vynechán, předchozí název souboru zůstane beze změny.
Je možné změnit zdrojové číslo řádku a název souboru pomocí zapsání direktivy #line.Překladač používá číslo řádku a název souboru k určení hodnoty předdefinovaných maker __FILE__ a __LINE__.Makra je možné použít k vložení samopopisných chybových zpráv do textu program.Další informace o těchto předdefinovaných maker naleznete v tématu Předdefinované makra.
Makro __FILE__ rozšíří řetězec, jehož obsahem je název souboru, uzavřený v uvozovkách ("").
Při změně čísla řádku a názvu souboru, kompilátor ignoruje předchozí hodnoty a pokračuje ve zpracování s novými hodnotami.Direktiva #line je obvykle používána generátory programu pro odkazování chybových zpráv na původní zdrojový soubor místo generovaného programu.
Následující příklady ilustrují makra #line a __LINE__ a __FILE__.
V tomto příkazu je interně uložené číslo nastaveno na 151 a název souboru se změní na copy.c.
#line 151 "copy.c"
V tomto příkladu makro ASSERT používá předdefinovaná makra __LINE__ a __FILE__ pro tisk chybové zprávy o zdrojovém souboru, pokud daný "výraz" není pravda.
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}