Direttiva #line
Direttiva del preprocessore che imposta il numero di riga e il nome file archiviati internamente del compilatore sui valori specificati.
#line lineNumber "filename" |
---|
Parametri
Elemento | Descrizione |
---|---|
Linenumber |
Numero di riga da impostare. Può trattarsi di qualsiasi costante integer. La sostituzione delle macro può essere eseguita sui token di pre-elaborazione, purché il risultato restituisca la sintassi corretta. |
filename [facoltativo] |
Nome file da impostare. Il nome file può essere qualsiasi combinazione di caratteri e deve essere racchiuso tra virgolette doppie (" "). Se questo parametro viene omesso, il nome file precedente rimane invariato. |
Commenti
Il compilatore usa il numero di riga e il nome file 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. 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 per fare riferimento al file di origine originale anziché al programma generato.
Il convertitore utilizza il numero di riga e il nome del 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. La macro __FILE__ si espande in una stringa il cui contenuto è il nome del file, racchiuso tra virgolette doppie (" ").
Esempio
Nell'esempio seguente il numero di riga viene impostato su 151 e il nome file su "copy.c".
#line 151 "copy.c"
Nell'esempio seguente, la macro ASSERT utilizza le macro predefinite __LINE__ e __FILE__ per stampare un messaggio di errore sul file di origine se l'asserzione specificata non è true.
#define ASSERT(cond)
if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}