2010-10-12 22 views
8

Duplicar posible:
Running the GCC preprocessorGCC preprocesador

¿Hay una opción GCC para hacer que el preprocesador GCC genera C código fuente, pero a filtrar el código fuente irrelevante?

Por ejemplo, un archivo C tiene #define switch para definir para muchas plataformas diferentes. Solo estoy intercalado en una plataforma, por lo que quiero el preprocesador C para filtrar el código no relacionado. ¿GCC apoya esto?

+2

Duplicado exacto (se parece al mismo usuario, el día de hoy): [preprocesador gcc] (http://stackoverflow.com/questions/3916979/gcc-preprocessor) –

+0

@Paul Es de hecho el mismo usuario; la versión original de esta pregunta antes de que Michael la limpiara era palabra por palabra idéntica, incluyendo el * Richard Luo * sig. – meagar

Respuesta

2

Sí, casi seguro que su compilador proporciona ciertas definiciones predeterminadas en el entorno que puede usar para activar y desactivar el código para diferentes sistemas. __GNUC__ es bueno para GCC. Por ejemplo:

#ifdef __GNUC__ 
#define SOME_VALUE 12 
#else 
#define SOME_VALUE 14 
#endif 

Si compila ese bloque con GCC, SOME_VALUE habrá 12, y si se compila con MSVC, por ejemplo, habrá SOME_VALUE 14. Una lista de las definiciones específicas de la plataforma está disponible en this question.

18

Utilice gcc -E para ejecutar solo la parte del preprocesador, p. dar un archivo in.c

#if 0 
0; 
#endif 

#if 1 
1; 
#endif 

corriendo

$ gcc -E in.c -o in.i 

produce un archivo in.i

# 1 "in.cpp" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "in.cpp" 





1; 

es decir, las partes detrás de la #if 0 obtuve eliminado. Si tuviera #include 'd archivos, también se habrían pegado, así que no estoy seguro de cuánta ayuda es esto.

+0

gracias por la respuesta. tal vez mi pregunta no es lo suficientemente clara. pero el bocinazo respondió mi pregunta. – richard

0

Probablemente puede utilizar:

gcc -CC -P -Uswitch -undef -nostdinc -fdirectives-only -dDI -E 

Con switch la #define que sabemos que va a ser indefinido.

Cuestiones relacionadas