2010-11-18 24 views
30

J'ai un fichier .cpp fourni de manière externe. C'est un mélange de code compatible C et un peu de C++. Le code C++ est juste un wrapper autour du C pour tirer parti des fonctionnalités C++.Forcer gcc à compiler le fichier .cpp en tant que C

Il utilise des macros #ifdef __cplusplus pour protéger le code C++, ce qui est génial. Malheureusement, si j'essaie de compiler en utilisant gcc, il le traite en C++ à cause de la fin du fichier. Je suis conscient des différences entre gcc et g ++ - je ne veux pas compiler en C++.

Est-il possible de forcer gcc à traiter ce fichier comme un fichier C? J'ai essayé d'utiliser par exemple --std=c99, mais cela génère correctement l'erreur que C99 n'est pas valide pour C++.

Renommer le fichier en .c fonctionne, mais je voudrais éviter cela si possible, car il est fourni en externe et il serait bon qu'il reste comme une copie vierge.

Merci!

+0

Parfois, lorsque je vois des questions SO. Je veux juste crier une grosse RTFM !! 'man gcc'. Pour ce roi de la question, il prend en fait moins de temps que d'écrire la question. – log0

+17

J'ai eu le même problème car je voulais compiler du code C pur dans un fichier .cpp ... évidemment je suis assez débutant en ce qui concerne C. RTFM! n'est pas un si bon conseil alors. Les pages man gcc sont 11.000 lignes et il est difficile de trouver une solution si vous ne savez pas quoi chercher. – mort

Répondre

51

L'option -x à gcc vous permet de spécifier la langue de tous les fichiers d'entrée suivants il:

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

Si vous voulez seulement cas spécial d'un fichier, vous pouvez utiliser -x none pour arrêter le traitement spécial :

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

(your-filename.cpp seront compilés comme C, tandis que other-file-name.cpp utilisera l'extension et la compilation en tant que C++)

+1

Comme c'est embarrassant, je dois avoir paginé juste devant! Merci beaucoup, la même chose à tous ceux qui ont répondu. – ralight

10

Pour compiler foo.cpp en tant que fichier C, vous pouvez créer un nouveau fichier nommé foo.c et mettre ce qui suit comme tout son contenu:

#include "foo.cpp" 

maintenant compiler foo.c au lieu de foo.cpp. Nous avons utilisé cela pour aller dans l'autre sens (compiler un fichier .c en C++) afin de commencer à utiliser des fonctionnalités C++ dans certains fichiers tout en préservant leur histoire CVS depuis dix ans. De plus, nous construisons en utilisant le compilateur natif de chaque plate-forme, pas seulement GCC, donc nous n'avons pas besoin de trouver la commande équivalente -x pour une demi-douzaine de compilateurs, et ensuite notre système de compilation applique cette commande uniquement à certains fichiers.

+0

Fonctionne comme le charme et la solution la plus rapide mentionnée possible je pense. – Mischo5500