
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=c99
pero 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.

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++)
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.
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