2010-11-18 15 views
30

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 de C++ es solo una envoltura alrededor de la C para aprovechar las características de C++.Obligar a gcc a compilar el archivo .cpp como C

Utiliza macros #ifdef __cplusplus para proteger el código C++, que 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, p. --std=c99, pero esto produce correctamente el error de que C99 no es válido para C++.

Cambiar el nombre del archivo en .c funciona, pero me gustaría evitar esto si es posible porque se proporciona de forma externa y sería bueno que permanezca como una copia prístina.

Gracias!

+0

A veces, cuando veo ASÍ preguntas. ¡Solo quiero gritar un gran RTFM! 'man gcc'. Para este rey de preguntas, en realidad lleva menos tiempo que escribir la pregunta. – log0

+17

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. no es un buen consejo entonces. Las páginas man de gcc son 11,000 líneas y es difícil encontrar una solución allí si no sabes qué buscar. – mort

Respuesta

51

La opción -x a gcc le permite especificar el idioma de todos los archivos de entrada después de que:

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

Si sólo desea caso especial que un archivo, puede utilizar -x none para cerrar el trato 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 utilizará la extensión y compilar como C++)

+1

¡Qué embarazoso, debo haberlo hojeado! Muchas gracias, lo mismo para todos los que respondieron. – ralight

10

Para compilar foo.cpp como un archivo de C, puede crear un nuevo archivo con el nombre foo.c y poner lo siguiente como todo su contenido:

#include "foo.cpp" 

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

Hemos utilizado esto para ir hacia el otro lado (compilar un archivo .c como C++) para comenzar a utilizar 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.

+0

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

Cuestiones relacionadas