stoi not float ejemplos declared convertir c++ c code-translation

not - Cómo convertir el código C++ a C



string to float c++ (6)

¿Tal vez un buen cfront va a hacer?

Tengo un código C ++. En el código hay muchas clases definidas, sus funciones miembro, constructores, destructores para esas clases, pocas clases de plantillas y muchas cosas de C ++. Ahora necesito convertir la fuente al código C simple.

Tengo las siguientes preguntas:

  1. ¿Hay alguna herramienta para convertir código C ++ y archivos de cabecera al código C?

  2. Tendré que hacer una reescritura total del código (tendré que eliminar los constructores, destructores y mover ese código a algunas funciones init() , deinit() , cambiar clases a estructuras, hacer funciones de miembros existentes como punteros a las funciones en los recién deinit() estructuras definidas y luego invocar esas funciones usando punteros de funciones, etc.)?

  3. Si tengo que convertirlo manualmente, ¿a qué construcciones / datos de código de C ++ específicos debo prestarle atención mientras hago la conversión de C ++ a C?


De hecho, existe una herramienta de este tipo, el compilador C ++ de Comeau. . Generará código C que no puede mantener manualmente, pero eso no es problema. Mantendrás el código C ++ y simplemente convertirás a C sobre la marcha.


Este es un hilo viejo, pero aparentemente el C++ Faq tiene una section (versión Archivada 2013) sobre esto. Aparentemente, esto se actualizará si se contacta al autor, por lo que probablemente esté más actualizado a largo plazo, pero esta es la versión actual:

Depende de lo que quieras decir. Si quiere decir, ¿es posible convertir C ++ en código C legible y mantenible? entonces lo siento, la respuesta es No - Las características de C ++ no se asignan directamente a C, además el código C generado no está destinado a ser seguido por los humanos. Si en cambio te refieres, ¿Hay compiladores que convierten C ++ en C con el propósito de compilar en una plataforma que aún no tiene un compilador C ++? entonces estás de suerte, sigue leyendo.

Un compilador que compila C ++ a C hace una sintaxis completa y una comprobación semántica en el programa, y ​​simplemente usa el código C como una forma de generar código objeto. Tal compilador no es simplemente un tipo de macroprocesador sofisticado. (Y no me envíe un mensaje de correo electrónico diciendo que estos son preprocesadores, no lo son, son compiladores completos). Es posible implementar todas las características de ISO Standard C ++ mediante la traducción a C, y salvo el manejo de excepciones, generalmente resulta en código objeto con una eficacia comparable a la del código generado por un compilador C ++ convencional.

Aquí hay algunos productos que realizan compilación para C:

  • Comeau Computing ofrece un compilador basado en el front end de Edison Design Group que emite el código C.
  • LLVM es un compilador descargable que emite código C. Ver también here y here . Aquí hay un ejemplo de conversión de C ++ a C a través de LLVM .
  • Cfront , la implementación original de C ++, realizada por Bjarne Stroustrup y otros en AT & T, genera código C. Sin embargo, tiene dos problemas: ha sido difícil obtener una licencia desde mediados de los 90 cuando comenzó a pasar por un laberinto de cambios de propiedad, y el desarrollo cesó al mismo tiempo, por lo que no se corrige el error y no admite ninguna de las características del lenguaje más nuevo (por ejemplo, excepciones, espacios de nombres, RTTI, plantillas de miembros).

  • Contrario al mito popular, hasta el momento de escribir esto no hay una versión de g ++ que traduzca C ++ a C. Tal cosa parece ser factible, pero no estoy al tanto de que alguien lo haya hecho (todavía).

Tenga en cuenta que, por lo general, necesita especificar el compilador de CPU, sistema operativo y C de la plataforma de destino para que el código C generado se oriente específicamente a esta plataforma. Esto significa: (a) probablemente no pueda tomar el código C generado para la plataforma X y compilarlo en la plataforma Y; y (b) será difícil hacer la traducción usted mismo: probablemente sea mucho más barato / más seguro con una de estas herramientas.

Una vez más: no me envíe un correo electrónico diciendo que estos son solo preprocesadores, no lo son, son compiladores.


Si bien puede hacer OO en C (por ejemplo, agregando un theType *this primer parámetro a los métodos y manipulando manualmente algo como vtables para polimorfismo), esto nunca es particularmente satisfactorio como diseño, y se verá feo (incluso con algunos hacks previos al procesador) )

Sugeriría al menos mirar un rediseño para comparar cómo esto funcionaría.

En general, mucho depende de la respuesta a la pregunta clave: si tiene código C ++ en funcionamiento, ¿por qué quiere C?


Un compilador consta de dos bloques principales: el ''front-end'' y el ''back-end''. El anverso de un compilador analiza el código fuente y construye alguna forma de ''representación intermediaria'' de dicho código fuente que es mucho más fácil de analizar mediante un algoritmo de máquina que el código fuente (es decir, mientras que el código fuente, por ejemplo, C ++ está diseñado para ayuda al programador humano a escribir el código, el formulario intermedio está diseñado para ayudar a simplificar el algoritmo que analiza dicha forma intermedia más fácil). La parte posterior de un compilador toma el formulario intermedio y luego lo convierte en un "idioma de destino".

Ahora, el lenguaje de destino para los compiladores de uso general son lenguajes ensambladores para varios procesadores, pero no hay nada que prohíba a un compilador realizar código en otro idioma, siempre que dicho idioma de destino sea (al menos) tan flexible como ensamblador general de CPU.

Ahora, como probablemente pueda imaginar, C es definitivamente tan flexible como el ensamblador de una CPU, de modo que un compilador de C ++ a C realmente no es un problema para implementar desde un punto de vista técnico.

Entonces tienes: C ++ --- frontEnd ---> someIntermediaryForm --- backEnd ---> C

Es posible que desee consultar a estos tipos: http://www.edg.com/index.php?location=c_frontend (el enlace anterior es solo informativo de lo que se puede hacer, otorgan licencias a sus interfaces por decenas de miles de dólares) )

PD: Hasta donde yo sé, GNU no tiene un compilador de C ++ a C, y esto me supera totalmente (si tengo razón en esto). Como el lenguaje C es bastante pequeño y sus mecanismos internos son bastante rudimentarios, un compilador de C requiere algo así como un trabajo de un año-hombre (puedo decirte esto de primera mano porque escribí tal compilador hace años, y produce un [compilador]). virtual] stack intermediate code), y poder tener un compilador de C ++ mantenido y actualizado, mientras que solo tener que escribir un compilador de C una vez sería una gran cosa tener ...