c++ - valido - visual studio code
¿Cómo veo un archivo fuente de C/C++ después del preprocesamiento en Visual Studio? (10)
Digamos que tengo un archivo fuente con muchas directivas de preprocesador. ¿Es posible ver cómo queda después de que el preprocesador haya terminado?
Como respondieron bk1e y Andreas M., la opción / P para el compilador hará que preprocese un archivo. Sin embargo, en mi proyecto que utiliza VS2005 y Platform Builder (para un procesador ARM incorporado), el proyecto no presentó una opción en el cuadro de diálogo (como lo describe Jim B) para habilitar esa opción.
Podía ejecutar CL manualmente y agregar / P, pero falló porque no conocía todas las opciones de línea de comandos apropiadas que Platform Builder activaba de forma invisible durante la compilació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 ejecutó
CL blah-blah-blah myfile.c
Copié esta línea al portapapeles. La parte "blah-blah-blah" contenía las opciones de compilación y era enorme.
De vuelta en el IDE, hice clic derecho en myfile.c, elegí "Abrir ventana de compilación", y luego en esa ventana pegué la línea de comando de compilació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.
En Visual Studio puedes compilar un archivo (o proyecto) con / P.
En el sistema operativo Windows, una respuesta simple de una línea a esta pregunta es usar el siguiente comando en el indicador de DOS para ver el archivo preprocesado:
CL /P /C myprogram.c
Esto generará un archivo llamado myprogram.i . Ábralo y busque sus preprocesadores expandidos.
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. Luego haga clic derecho en el archivo en el Explorador de soluciones y seleccione "Compilar". 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).
La mayoría de los compiladores tienen una opción para simplemente 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.
Así que puedes simplemente correr:
gcc -E foo.c
Si no puede encontrar una opción de este tipo, también puede encontrar el preprocesador de C en su máquina. Generalmente se llama cpp y probablemente ya esté en tu camino. Invocalo así:
cpp foo.c
Si hay encabezados que debe incluir desde otros directorios, puede pasar -I / path / a / include / dir a cualquiera de estos, tal como lo haría con una compilación regular.
Para Windows, lo dejo a otros carteles para proporcionar respuestas ya que no soy un experto allí.
No sé nada sobre el compilador de Microsoft, pero en GCC puedes usar esto:
gcc -E -P -o result.c my_file.h
Si quieres ver comentarios usa esto:
gcc -E -C -P -o result.c my_file.h
Más opciones disponibles en esta página .
Por lo general, es necesario realizar un procesamiento posterior en la salida del preprocesador; de lo contrario, todas las macros simplemente se expanden a una línea, 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-x.c
Para el código C ++, en realidad es mucho más difícil. Para GCC / g ++, encontré este script de Perl útil.
Pruebe cl /EP
si está utilizando el compilador C ++ de Microsoft.
CPIP es un nuevo preprocesador C / C ++ escrito en Python. Si desea una representación visual detallada de un archivo preprocesado, inténtelo.
CPIP es un preprocesador C / C ++ implementado en Python. La mayoría de los preprocesadores consideran el preprocesamiento 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 desechan mucha información útil para obtener el resultado lo más barato posible.
Pocos desarrolladores realmente entienden el preprocesamiento, para muchos es un poco oscuro de magia negra. CPIP apunta a mejorar eso y al 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 para cpp (o cualquier otro preprocesador establecido), en su lugar, CPIP considera que la claridad y la comprensión son más importantes que la velocidad de procesamiento.
cl.exe
, la interfaz de línea de comandos de Microsoft Visual C ++, tiene tres opciones diferentes para generar el archivo preprocesado (de ahí la inconsistencia en las respuestas anteriores sobre Visual C ++):
-
/E
: preprocesamiento a la salida estándar (similar a la opción -E de GCC) -
/P
: preprocesar a archivo -
/EP
: preprocesamiento a la salida estándar sin directivas #line
Si desea preprocesar en un archivo sin directivas #line, combine las opciones /P
y /EP
.