2010-02-19 14 views
8

Tengo un fragmento de código que compila sin problemas con x86 gcc 4.4.1 pero falla con blackfin gcc 4.1.2 con muchos errores "esperado de identificación no calificada antes de la constante numérica". Veo que hay algunos nombres de variables que chocan con algunas macros predefinidas. ¿Es posible ver macros definidas en cierta línea de un archivo cpp?¿Puedo ver las macros definidas durante la compilación de un código C?

Respuesta

11
gcc -dM -E myfile.cpp 
  • El interruptor -dM dice GCC para volcar todas las macros definidas en el archivo dado (que incluirá una lista de macros necesarias para ser definido por el estándar del lenguaje, así como cualquier macro adicionales GCC se autodefine)

  • El interruptor -E le dice a GCC que no continúe compilando después de que haya preprocesado el archivo.

Para ver una lista de macros definidas en una determinada línea de un archivo CPP, puede ser más fácil de filtrar primera a cabo cualquiera de las macros predefinidas (macros definidos por el compilador). En BASH, se podría hacer:

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 -) 

Esto debería filtrar las macros definidas por las cabeceras de sistema estándar o marcos. La parte adicional, -x c++, le dice a GCC que interprete la entrada como fuente C++ [que requiere preprocesamiento], esto se debe a que no podrá determinarlo en función de la extensión del nombre de archivo (el código fuente se entrega a GCC mediante stdin).

Cuestiones relacionadas