direttiva #line (C/C++)

La direttiva #line indica al preprocessore di impostare i valori segnalati del compilatore per il numero di riga e il nome file su un determinato numero di riga e nome file.

Sintassi

#linedigit-sequence ["filename"]

Osservazioni:

Il compilatore utilizza il numero di riga e il nome del file facoltativo per fare riferimento agli errori rilevati durante la compilazione. Il numero di riga in genere si riferisce alla linea di input corrente, mentre il nome del file fa riferimento al file di input corrente. Il numero di riga viene incrementato dopo l'elaborazione di ogni riga.

Il valore della sequenza di cifre può essere qualsiasi costante integer compreso nell'intervallo compreso tra 0 e 2147483647, inclusi. La sostituzione delle macro può essere usata nei token di pre-elaborazione, ma il risultato deve restituire la sintassi corretta. Il nome file può essere qualsiasi combinazione di caratteri e deve essere racchiuso tra virgolette doppie (" "). Se filename viene omesso, il nome file precedente rimane invariato.

È possibile modificare il numero di riga di origine e il nome file scrivendo una #line direttiva. La #line direttiva imposta il valore per la riga che segue immediatamente la direttiva nel file di origine. Il traduttore usa il numero di riga e il nome file per determinare i valori delle macro predefinite __FILE__ e __LINE__. È possibile utilizzare queste macro per inserire messaggi di errore autodescrittivi nel testo del programma. Per altre informazioni su queste macro predefinite, vedere Macro predefinite.

La __FILE__ macro si espande in una stringa il cui contenuto è il nome file, racchiuso tra virgolette doppie (" ").

Se si modifica il numero di riga e il nome del file, il compilatore ignora i valori precedenti e continua l'elaborazione con i nuovi valori. La direttiva #line viene in genere usata dai generatori di programmi. Viene usato per fare in modo che i messaggi di errore facciano riferimento al file di origine originale, anziché al programma generato.

Esempio

Gli esempi seguenti illustrano #line e le __LINE__ macro e __FILE__ .

Nel primo esempio il numero di riga è impostato su 10, quindi su 20 e il nome file viene modificato in 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

In questo esempio la macro ASSERT usa le macro __LINE__ predefinite e __FILE__ per stampare un messaggio di errore sul file di origine se una determinata asserzione non è true.

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

Vedi anche

Direttive del preprocessore