Ho un pezzo di codice che compila senza problemi con x86 gcc 4.4.1 ma non riesce con blackfin gcc 4.1.2 con molti errori "atteso non qualificato prima della costante numerica". Vedo che ci sono alcuni nomi di variabili che si scontrano con alcune macro predefinite. È possibile vedere le macro definite su una determinata riga di un file cpp?Posso vedere le macro definite durante la compilazione di un codice C?
risposta
gcc -dM -E myfile.cpp
L'interruttore
-dM
dice a GCC di scaricare tutte le macro definite nel file specificato (che comprenderà un elenco di macro che devono essere definiti dal linguaggio standard così come tutte le macro supplementari GCC si definisce).L'opzione
-E
indica a GCC di non continuare la compilazione dopo che il file è stato pre-elaborato.
Per visualizzare un elenco di macro definiti a una data linea di un file cpp, può essere più facile per filtrare prima di taluna delle macro predefinite (macro definite dal compilatore). In BASH, è possibile effettuare le seguenti operazioni:
LINE=40
FILE=myfile.cpp
HEADER=myfile.h
diff <(grep -h '#include[[:space:]]*<.*>' ${FILE} ${HEADER} | gcc -dM -x c++ -E -) <(cat ${FILE} | head -n ${LINE} | gcc -x c++ -dM -E -)
Questo dovrebbe escludere eventuali macro definite da intestazioni di sistema o framework standard. La parte aggiuntiva, -x c++
, dice a GCC di interpretare l'input come sorgente C++ [che richiede la preelaborazione], questo perché non sarà in grado di determinarlo in base all'estensione del nome file (il codice sorgente viene passato a GCC tramite stdin).