¿Cómo puedo convertir el código fuente c99 automáticamente en c89? Quiero compilar bibliotecas c99 con Visual C++, pero MSVC solo admite c89. Muchos cambios son solo sintácticos, como los inicializadores de estructuras, y puede escribir una herramienta para el código "de-c99" automáticamente. ¿Este preprocesador existe?Convertir el código C99 a C89
Respuesta
Lo que necesita es un program transformation system. Dicha herramienta lee el código fuente, construye estructuras de datos de compilación (como abstract syntax trees, le permite aplicar transformaciones de origen a origen en esas estructuras y luego puede regenerar el origen de las estructuras de datos modificadas.
Necesita uno que puede analizar C99, y transformar a C89. Nuestro DMS Software Reengineering Toolkit puede hacerlo, usando su C Front End (que puede manejar ambos dialectos de C, incluyendo MSVC 89, así como ObjectiveC). Tener un analizador maduro es necesario si quieres hacer esto
Mucha gente puede sugerir que todo que necesita es un analizador C99. En la práctica, eso no es cierto, para hacer transformaciones interesantes en los lenguajes de programación típicos necesita datos de tablas de símbolos, algunos flujos de datos, etc. Para más detalles, vea mi ensayo en Life After Parsing, y cómo DMS proporciona esa vida.
Uno de estos aspectos es cómo se codifica el reemplazo de los inicializadores de estructuras. Puede hacer eso mediante un código personalizado que recorre un C99 AST, encuentra dichos inicializadores de estructura y corta el árbol de procedimientos. Sí, eso funciona, pero no es fácil y tienes que saber mucho sobre la estructura del árbol. DMS ofrece reescrituras de fuente a fuente, por lo que puede escribir patrones que reconocen las expresiones que desea modificar, y patrones que producen las expresiones idiomáticas resultantes, todo con la sintaxis de superficie C.
El comercial Comeau C/C++ compiler puede hacer esto.
Como alternativa, utilice un compilador de C adecuado (por ejemplo, GCC o Clang a través de MinGW, Pelles C, Intel) y vincule los archivos de objeto resultantes. Sin embargo, no todos estos (en particular MinGW) admiten el formato de depuración de Microsoft.
basada en Clang traductor de código-fuente:
- 1. ¿Es posible mezclar el código C89 con el código C99?
- 2. ¿C99 es compatible con C89?
- 3. C89 C99 vs compilador GCC
- 4. compilando con c89 y c99 ¿gcc 4.4.2 está por defecto en c99?
- 5. C89, Mezcla declaraciones de variables y Código
- 6. Comprobador estático gratuito para el código C99
- 7. ¿Qué versión de C es más apropiada para que los alumnos aprendan C89/90 o C99?
- 8. Cómo aplicar declaraciones variables de estilo C89 en gcc?
- 9. Convertir código PHP a C++
- 10. ¿C89 o C++ 03 definen reglas de alias estrictas?
- 11. Qué características C99 se consideran dañinas o no compatibles
- 12. P99 y C99 frente a C11
- 13. ¿Cuál es el objetivo del estándar C99?
- 14. Semántica volátil en C99
- 15. Cómo convertir un carácter a código clave?
- 16. Una forma de convertir la secuencia de bytes a la transmisión de paquetes en C89 en un dispositivo incrustado
- 17. ¿Cómo convertir ASM a código legible?
- 18. Cómo convertir código C++ a C
- 19. Cómo convertir el código IR de llvm a c?
- 20. Atajo inteligente para convertir el código a mayúscula o minúscula?
- 21. ¿Cómo convertir automáticamente el código de conservación manual a ARC?
- 22. cómo convertir el código de Python 3 a Python 2?
- 23. ¿Cómo convertir el código de Ruby 1.9.2 a JavaScript?
- 24. ¿Cómo puedo convertir el código VB6 a C#?
- 25. ¿Es posible convertir automáticamente el código Java a PHP?
- 26. Una herramienta para convertir el código de MATLAB a Python
- 27. Convertir PNG transparente a System.Drawing.Icon en el código
- 28. Arrays de longitud variable en C89?
- 29. Convertir código clave a clave char
- 30. Cómo convertir código OpenGL a WebGL
Creo que la razón para crear C99 era exactamente para evitar este tipo de "pre-procesadores" :) para el "futuro" (sí, nunca mejor dicho) - evita las funciones modernas si usas las herramientas antiguas. –
Sería menos trabajo si lo compilara como C++ en su lugar ... –
Puede usar un compilador moderno de terceros, como el ICC de Intel, que se puede conectar a Visual Studio. –