2013-03-28 13 views
5

Utilizzando questa opzione, ricevo i file dopo aver preelaborato. Ci sono molte righe come:g ++ -E opzione output

# 91 "/usr/include/stdint.h" 3 4 

Cosa significano i numeri? Per prima cosa ho pensato che #91 fosse il numero di riga in cui il file è incluso, ma non è così. E a proposito di 3 4 non ne ho idea.

risposta

8

Secondo the official documentation, la linea è del formato:

# linenum filename flags 

Il linenum specifica che la seguente riga provenuto filename a quel numero di riga. Poi ci sono quattro bandiere:

  • 1 - inizio di un nuovo file di
  • 2 - Tornando a un file
  • 3 - file di intestazione Sistema
  • 4 - Trattare ad essere avvolto in extern "C"

Quindi interpretiamo il tuo marcatore:

# 91 "/usr/include/stdint.h" 3 4 

La riga seguente ha origine dalla riga 91 di /usr/include/stdint.h. È un file di intestazione di sistema e deve essere trattato come impacchettato in extern "C".

1

Ci sono flag (spazio) e il significato è:

1 - Start of a new file 
2 - Returning to previous file 
3 - Following text comes from a system header file (#include <> vs #include "") 
4 - Following text should be treated as being wrapped in an implicit extern "C" block. 
5

Questi sono chiamati "indicatori di linea". Dal documentation:

nome del file di origine e il numero di riga delle informazioni viene convogliata da linee di forma

# linenum filename flags 

Questi sono chiamati linemarkers. Vengono inseriti come necessario nell'output (ma mai all'interno di una stringa o costante di carattere). Significano che la riga seguente ha avuto origine nel nome file del file alla riga linenum. filename non conterrà mai caratteri non stampabili; vengono sostituiti con sequenze di escape ottali.

Dopo che il nome del file viene zero o più bandiere, che sono ‘1’, ‘2’, ‘3’ o ‘4’. Se ci sono più flag, gli spazi li separano. Ecco cosa le bandiere significano:

  • ‘1’ - Questo indica l'inizio di un nuovo file.
  • ‘2’ - Questo indica il ritorno a un file (dopo aver incluso un altro file).
  • ‘3’ - Indica che il seguente testo proviene da un file di intestazione di sistema, pertanto è necessario eliminare determinati avvisi.
  • ‘4’ - Indica che il seguente testo deve essere considerato come avvolto in un blocco implicito extern "C".
Problemi correlati