J'ai un fichier .CPP fourni à l'extérieur. C'est un mélange de code compatible C et un peu de C++. Le code C++ n'est qu'une enveloppe autour du C pour tirer parti des fonctionnalités C++.
Il utilise #ifdef __cplusplus
Macros pour protéger le code C++, ce qui est génial. Malheureusement, si j'essaie de compiler à l'aide de GCC, il le traite comme C++ en raison de la fin du fichier. Je suis au courant des différences entre GCC et G ++ - je ne veux pas compiler comme C++.
Est-ce que je peux forcer GCC à traiter ce fichier en tant que fichier C? J'ai essayé d'utiliser par exemple. --std=c99
, mais cela produit correctement l'erreur que C99 n'est pas valide pour C++.
Renommer le fichier à .c fonctionne, mais j'aimerais éviter cela si possible, car il est fourni de manière externe et ce serait bien qu'il reste comme une copie vierge.
Merci!
Les -x
L'option de GCC vous permet de spécifier la langue de tous les fichiers d'entrée en suivant:
$ gcc -x c your-file-name.cpp
Si vous ne voulez que spécialement cas qu'un fichier, vous pouvez utiliser -x none
Pour éteindre le traitement spécial:
$ gcc -x c your-filename.cpp -x none other-file-name.cpp
(your-filename.cpp
sera compilé comme c, tandis que other-file-name.cpp
utilisera l'extension et compilera comme C++)
Pour compiler FOO.CPP En tant que fichier C, vous pouvez créer un nouveau fichier nommé FOO.C et mettre les suivants comme tout son contenu:
#include "foo.cpp"
Maintenant compilez FOO.C au lieu de FOO.CPP.
Nous avons utilisé cela pour aller dans l'autre sens (compiler a -. C fichier comme C++) afin de commencer à utiliser les fonctionnalités C++ dans certains fichiers tout en préservant l'historique des CVS de leur décennie. En outre, nous construisons en utilisant le compilateur natif de chaque plate-forme, pas seulement GCC, nous n'avions donc pas à trouver le -x
Commande équivalente pour une demi-douzaine de compilateurs, puis rendre notre système de construction appliquer cette commande uniquement à certains fichiers.