¿Cómo veo un archivo fuente C / C ++ después del preprocesamiento en Visual Studio?

Digamos que tengo un archivo fuente con muchas directivas de preprocesador. ¿Es posible ver cómo se ve después de que el preprocesador haya terminado?

cl.exe , la interfaz de línea de comandos para Microsoft Visual C ++, tiene tres opciones diferentes para generar el archivo preprocesado (de ahí la incoherencia en las respuestas anteriores sobre Visual C ++):

  • /E : preproceso a stdout (similar a la opción G de GCC)
  • /P : preprocesado para archivar
  • /EP : preprocesado a stdout sin directivas #line

Si desea preprocesar un archivo sin directivas #line, combine las opciones /P y /EP .

La mayoría de los comstackdores tienen la opción de ejecutar el preprocesador. por ejemplo , gcc proporciona -E:

  -E Stop after the preprocessing stage; do not run the compiler proper. The output is in the form of preprocessed source code, which is sent to the standard output. 

Entonces puedes simplemente ejecutar:

 gcc -E foo.c 

Si no puede encontrar esa opción, también puede encontrar el preprocesador C en su máquina. Por lo general, se llama cpp y probablemente ya esté en su camino. Invocarlo así:

 cpp foo.c 

Si hay encabezados que necesita incluir de otros directorios, puede pasar -I / ruta / a / incluir / dir a cualquiera de estos, tal como lo haría con una comstackción regular.

Para Windows, dejaré que otros pósters me proporcionen respuestas ya que no soy un experto allí.

Haga clic derecho en el archivo en el Explorador de soluciones, vaya a Propiedades. En Propiedades de configuración-> C / C ++ -> Preprocesador, “Generar archivo preprocesado” es lo que está buscando. A continuación, haga clic derecho en el archivo en el Explorador de soluciones y seleccione “Comstackr”. El archivo preprocesado se crea en el directorio de salida (por ejemplo, Release, Debug) con una extensión .i (gracias a Steed por su comentario).

Por lo general, es necesario realizar un procesamiento posterior en la salida del preprocesador; de lo contrario, todas las macros se expanden a uno solo, lo cual es difícil de leer y depurar. Para el código C, algo como lo siguiente sería suficiente:

 gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-xc 

Para el código C ++, en realidad es mucho más difícil. Para GCC / g ++, encontré este script de Perl útil.

No sé nada sobre el comstackdor de Microsoft, pero en GCC puedes usar esto:

 gcc -E -P -o result.c my_file.h 

Si quiere ver comentarios, use esto:

 gcc -E -C -P -o result.c my_file.h 

Más opciones disponibles en esta página .

Pruebe cl /EP si está usando el comstackdor C ++ de Microsoft.

En Visual Studio puede comstackr un archivo (o proyecto) con / P.

Como bk1e y Andreas M. respondieron, la opción / P para el comstackdor hará que preprocesa un archivo. Sin embargo, en mi proyecto utilizando VS2005 y Platform Builder (para un procesador ARM incrustado), el proyecto no presentó una opción en el cuadro de diálogo (como lo describe Jim B) para habilitar esa opción.

Pude ejecutar CL manualmente y agregar / P, pero falló porque no conocía todas las opciones de línea de comandos apropiadas que se activaron de forma invisible por Platform Builder durante la comstackción completa. Así que necesitaba saber todas esas opciones.

Mi solución fue buscar en el archivo build.log y encontrar la línea que se ejecutó

CL blah-blah-blah myfile.c

Copié esta línea en el portapapeles. La parte “bla-bla-bla” contenía las opciones de comstackción, y era enorme.

De vuelta en el IDE, hice clic derecho en myfile.c, escogí “Open Build Window”, y luego en esa ventana pegué la línea de comandos de comstackción, y agregué una “/ P”.

CL /P blah-blah-blah myfile.c

Hecho. Se produjo el archivo myfile.i, que contenía la salida del preprocesador.

CPIP es un nuevo preprocesador C / C ++ escrito en Python. Si desea una representación visual detallada de un archivo preprocesado, pruébelo.

CPIP es un preprocesador C / C ++ implementado en Python. La mayoría de los preprocesadores consideran el procesamiento previo como un trabajo sucio que solo debe hacerse lo antes posible. Esto puede hacer que sea muy difícil rastrear defectos sutiles en la etapa de preprocesamiento, ya que los preprocesadores eliminan una gran cantidad de información útil a favor de obtener el resultado lo más barato posible.

Pocos desarrolladores realmente entienden el procesamiento previo, para muchos es un poco oscuro de magia negra. El objective de CPIP es mejorar eso y registrar cada detalle del preprocesamiento para que CPIP pueda producir información maravillosamente visual sobre las dependencias de archivos, el uso de macros, etc.

CPIP no está diseñado para ser un reemplazo de cpp (o de cualquier otro preprocesador establecido), en cambio, CPIP considera que la claridad y la comprensión son más importantes que la velocidad de procesamiento.

En el sistema operativo Windows, una respuesta simple de una línea a esta pregunta es usar el siguiente comando en DOS para ver el archivo preprocesado:

 CL /P /C myprogram.c 

Esto generará un archivo llamado myprogram.i . Ábralo y busque sus preprocesadores ampliados.