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 con él?
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 con él?
Respuestas:
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 inconsistencia en las respuestas anteriores sobre Visual C ++):
/E
: preproceso a stdout (similar a la opción -E de GCC)/P
: preproceso para archivar/EP
: preproceso a stdout sin directivas #lineSi desea preprocesar un archivo sin directivas #line, combine las opciones /P
y /EP
.
/P
suprimirá la generación de archivos obj. Entonces, si pone /P
opciones, puede obtener un error de enlace que dice que no se pueden encontrar algunos archivos obj porque en realidad no se genera en absoluto.
VS Developer command prompt
y NO dentro Command prompt
cuando intente utilizar el compilador de MS ( cl
). El compilador no está disponible en el comando convencional.
La mayoría de los compiladores 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 tu camino. Invocarlo así:
cpp foo.c
Si hay encabezados que necesita incluir desde otros directorios, puede pasar -I / ruta / a / incluir / dir a cualquiera de estos, tal como lo haría con una compilación regular.
Para Windows, lo dejaré a otros carteles para que 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. 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).
Release
, Debug
) con una extensión .i
.
Por lo general, debe realizar un procesamiento posterior en la salida del preprocesador; de lo contrario, todas las macros simplemente se expanden a un revestimiento, lo que 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 ++, este script de Perl me pareció útil.
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 .
En Visual Studio puede compilar un archivo (o proyecto) con / P.
Como respondieron bk1e y Andreas M., la opción / P para el compilador hará que preprocese un archivo. Sin embargo, en mi proyecto usando 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.
Pude ejecutar CL manualmente y agregar / P, pero falló porque no conocía todas las opciones apropiadas de línea de comandos que Platform Builder estaba activando de manera 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 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 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 comandos de compilación, y agregué un "/ 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, 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 arrojan 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 tiene como objetivo mejorar eso y al registrar cada detalle del preprocesamiento para que CPIP pueda producir información maravillosamente visual sobre dependencias de archivos, uso de macros, etc.
CPIP no está diseñado para reemplazar a 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.
En el sistema operativo Windows, una respuesta simple de una línea a esta pregunta es utilizar 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.