Obligar a GCC a compilar el archivo .cpp como C

3 minutos de lectura

Obligar a GCC a compilar el archivo cpp como C
ligero

Tengo un archivo .cpp proporcionado externamente. Es una mezcla de código compatible con C y un poco de C++ también. El código C++ es solo un envoltorio alrededor de C para aprovechar las características de C++.

Usa #ifdef __cplusplus macros para proteger el código C++, lo cual es genial. Desafortunadamente, si trato de compilar usando GCC, lo trata como C++ debido al final del archivo. Soy consciente de las diferencias entre gcc y g++ – No quiero compilar como C++.

¿Hay alguna forma de obligar a GCC a tratar este archivo como un archivo C? He intentado usar por ejemplo --std=c99pero esto produce correctamente el error de que C99 no es válido para C++.

Cambiar el nombre del archivo a .c funciona, pero me gustaría evitar esto si es posible porque se proporciona externamente y sería bueno que permanezca como una copia original.

  • A veces, cuando veo SO preguntas. ¡Solo quiero gritar un gran RTFM! man gcc. Para este rey de las preguntas, en realidad lleva menos tiempo que escribir la pregunta.

    – log0

    18 de noviembre de 2010 a las 15:21

  • Tuve el mismo problema porque quería compilar código C puro dentro de un archivo .cpp… ¡obviamente soy bastante principiante en lo que respecta a C. RTFM! entonces no es un buen consejo. Las páginas de manual de gcc tienen 11.000 líneas y es un poco difícil encontrar una solución allí si no sabe qué buscar.

    – muerte

    4 de noviembre de 2011 a las 8:05

  • No estoy de acuerdo, leer la documentación nunca es una pérdida de tiempo, y la documentación de GCC está bien escrita en mi humilde opinión.

    – Basile Starynkevitch

    26 de abril de 2021 a las 14:26

1647299886 941 Obligar a GCC a compilar el archivo cpp como C
Michael Mrozek

los -x opción para gcc le permite especificar el idioma de todos los archivos de entrada que le siguen:

$ gcc -x c your-file-name.cpp

Si solo desea un caso especial de ese archivo, puede usar -x none para cerrar el tratamiento especial:

$ gcc -x c your-filename.cpp -x none other-file-name.cpp

(your-filename.cpp será compilado como C, mientras que other-file-name.cpp usará la extensión y compilará como C++)

  • ¡Qué vergüenza, debo haber pasado de largo! Muchas gracias, lo mismo a todos los demás que respondieron.

    – luz

    18 de noviembre de 2010 a las 15:23

Compilar foo.cpp como un archivo C, puede crear un nuevo archivo llamado foo.c y poner lo siguiente como todo su contenido:

#include "foo.cpp"

Ahora compila foo.c en lugar de foo.cpp.

Hemos usado esto para ir en sentido contrario (compilar un .C file como C++) para comenzar a usar las características de C++ en algunos archivos mientras se preserva su historial de CVS de una década. Además, construimos usando el compilador nativo de cada plataforma, no solo GCC, por lo que no tuvimos que encontrar el -x comando equivalente para media docena de compiladores, y luego haga que nuestro sistema de compilación aplique ese comando solo a ciertos archivos.

  • Funciona como encanto y la solución mencionada más rápida posible, creo.

    – Mischo5500

    18/01/2016 a las 21:36

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad