ejecutar con compilar compilador como c++ c gcc compilation

c++ - con - Obligar a gcc a compilar el archivo.cpp como C



gcc linux (2)

La opción -x de 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 en 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 se compilará como C, mientras que other-file-name.cpp usará la extensión y compilará como C ++)

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

Utiliza las macros #ifdef __cplusplus para proteger el código C ++, lo cual es genial. Desafortunadamente, si intento 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 manera de forzar 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 está provisto externamente y sería bueno que permanezca como una copia prístina.

¡Gracias!


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

#include "foo.cpp"

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

Hemos utilizado esto para ir por el otro camino (compilar un archivo .c 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, compilamos utilizando el compilador nativo de cada plataforma, no solo GCC, por lo que no tuvimos que buscar el comando equivalente -x para una media docena de compiladores, y luego hacer que nuestro sistema de compilación aplique ese comando solo a ciertos archivos.