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?¿Cómo veo un archivo fuente C/C++ después del preprocesamiento en Visual Studio?
Respuesta
cl.exe
, la interfaz de línea de comandos para Microsoft Visual C++, tiene tres opciones diferentes para dar salida al archivo preprocesado (de ahí la falta de coherencia en las respuestas anteriores acerca de Visual C++):
/E
: preprocess to stdout (similares a GCC opción -E)/P
: preprocess to file/EP
: preprocess to stdout without #line directives
Si desea preprocesar un archivo sin directivas #line, combine las opciones /P
y /EP
.
¿Cómo paso estos comandos a un proyecto con nmake y Makefile? – WooDzu
@WooDzu Utilice NMAKE (nmake.exe) para automatizar tareas que crean proyectos de Visual C++ utilizando un archivo MAKE tradicional. ~ https://msdn.microsoft.com/en-us/library/f35ctcxw.aspx –
Tenga en cuenta que '/ P' suprimirá la generación de archivos obj. Entonces, si pones las opciones '/ P', puedes obtener un error en el enlace diciendo que algunos archivos obj no se pueden encontrar porque en realidad no se generan en absoluto. – smwikipedia
La mayoría de los compiladores tienen la opción de ejecutar el preprocesador. p., 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.
lo que sólo puede funcionar:
gcc -E foo.c
Si no puede encontrar una opción, también puede simplemente encontrar el preprocesador de C en su máquina. Por lo general, se llama cpp y probablemente ya esté en su camino. Invocarlo como esto:
cpp foo.c
Si hay encabezados que necesita para incluir a otros directorios, puede pasar -I/ruta/a/include/dir a cualquiera de éstos, tal como lo haría con una compilación periódica .
Para Windows, dejaré que otros carteles me proporcionen respuestas ya que no soy un experto allí.
pregunta de gcc: http: // stackoverflow.com/questions/3916979/how-to-run-the-gcc-preprocessor-to-see-how-the-source-looks-after-define-are-e –
En Visual Studio puede compilar un archivo (o proyecto) con/P.
Pruebe cl /EP
si está utilizando el compilador de C++ de Microsoft.
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 "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).
"Preprocesamiento de un archivo" en VS2010. –
BTW, el archivo se crea en el directorio de salida (por ejemplo, 'Release',' Debug') con una extensión '.i'. – Steed
+1 respuesta más directa. –
Por lo general, es necesario realizar algunos procesos posteriores 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 el 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é this Perl script útil.
Como bk1e y Andreas M. respondieron, la opción/P para el compilador provocará 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 sabía todas las opciones apropiadas de línea de comandos que se activaron de forma invisible por Platform Builder durante la compilación completa. Así que necesitaba saber todas esas opciones.
Mi solución fue ir a buscar en el archivo build.log, y encontrar la línea que ejecuta
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
Done. Se produjo el archivo myfile.i, que contenía la salida del preprocesador.
No sé nada acerca de Microsoft compilador, pero en GCC se puede utilizar este:
gcc -E -P -o result.c my_file.h
Si desea ver los comentarios usan este:
gcc -E -C -P -o result.c my_file.h
Más opciones de anticipación this page .
Esto también funciona con compiladores derivados de gcc, como qcc.exe, ¡gracias! – sage
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 objetivo 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 reemplazar a cpp (o 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 y una línea a esta pregunta es utilizar 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.
- 1. Abrir un archivo en Visual Studio CSS Editor Fuente
- 2. ¿Cómo guardar automáticamente el archivo del proyecto después de incluir un nuevo archivo en Visual Studio?
- 3. ¿Visual Studio puede automáticamente sangrar/formatear las directivas de preprocesamiento?
- 4. Importación del código fuente existente de C++ en Visual Studio
- 5. cómo cambiar la codificación del archivo fuente en el proyecto csharp (máquina visual studio/msbuild)?
- 6. Cómo saltar a un archivo en el Explorador de control de código fuente en Visual Studio
- 7. Visual Studio mscorlib clases código fuente
- 8. Mostrar solución/ruta del archivo en Visual Studio IDE
- 9. ¿Puede gcc salir el código C después del preprocesamiento?
- 10. ¿Cómo veo un archivo .rb (Ruby)?
- 11. Cómo abrir rápidamente un archivo en Visual Studio 2012
- 12. Visual Studio 2010 saliendo después del programa finaliza
- 13. Fuente borrosa de Visual Studio 2010
- 14. Cómo exportar e importar un archivo XSD en Visual Studio?
- 15. Cómo agrego un archivo .svc en Visual Studio
- 16. Eliminar archivo .pdb en visual studio 2010
- 17. ¿Es posible decirle a Visual Studio que no trate un archivo fuente como un "componente"?
- 18. ¿Soluciona el formateo del archivo aspx en Visual Studio?
- 19. NSIS visual studio color/fuente/intellisense
- 20. fuente visual segura - cómo eliminar enlaces de la solución sin abrir en visual studio
- 21. Visual Studio 2010 Locals Ventana Rojo Fuente
- 22. Control de fuente TFS sin Visual Studio?
- 23. agregar nueva fuente a visual studio 2010
- 24. ¿Cómo veo la lista de complementos y complementos en Visual Studio?
- 25. Cambio de fuente para las variables miembro en Visual Studio
- 26. Cómo compilar un archivo C sin visual studio
- 27. Ejecutar macro hasta el final del archivo en Visual Studio
- 28. Recuperar un archivo de clase .CS después del bloqueo
- 29. Visual Studio no se está reconstruyendo después del cambio de archivo de contenido
- 30. Abrir un archivo mediante programación en Visual Studio (2010)
Ayudaría si proporcionó más información, como qué compilador está utilizando. – JaredPar
Actualmente estoy usando Visual Studio 2005 como mi IDE. – Geo
Entonces de forma predeterminada está utilizando el compilador cl.exe. –