2012-05-29 11 views
8

¿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

+1

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. –

+1

Sería menos trabajo si lo compilara como C++ en su lugar ... –

+2

Puede usar un compilador moderno de terceros, como el ICC de Intel, que se puede conectar a Visual Studio. –

Respuesta

1

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.

3

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.

Cuestiones relacionadas