2012-11-01 4 views
6

Ho appena incontrato un file diC che contiene sia le direttive del preprocessore e le linee che assomigliano a questo:Cosa fa il preprocessore con "# <number><filename>"?

# 9 "filename" 

non ho mai visto queste righe prima. Cosa vogliono dire? Immagino che queste siano direttive del preprocessore, ma cosa fa il preprocessore con loro?

Inoltre, per alcune delle linee della stringa non ha nemmeno rappresenta un nome di file esistente ...

risposta

4

Credo che sia un altro modo di utilizzare la direttiva #line preprocessore.

Per esempio si potrebbe scrivere:

// you could write #line 7 "filename" or 
// # 7 "filename" or 
// # 7 or 
#line 7 
int main(void) 
{ 
     printf("%d\n", __LINE__); 

E tutti loro darebbe voi (in questo caso) 10 su stdout.

E una nota sulla parte "nome file" è facoltativa e non verificata (è per questo che può essere qualsiasi cosa, anche un file che non esiste). Il suo uso è spiegato nel collegamento che ho fornito -
If you specify a file name, the compiler views the next line as part of the specified file. If you do not specify a file name, the compiler views the next line as part of the current source file.

+0

Oh, quindi la mia domanda era sbagliata, e quelle * sono * le direttive del preprocessore dopotutto. – Oak

+0

@Oak - Sì, è solo un'altra direttiva preprocessore. Buona domanda, è più difficile dire quando non usano la parte 'line' di esso. – Mike

+0

Appena controllato e questo è davvero il caso :) grazie! Inoltre, sembra che la stringa possa essere qualunque stringa io voglia - anche se non è un nome file legale - e lo userà solo come nome file (ad esempio '__FILE__'). – Oak