HOWTO · C++

Différence entre les extensions de fichier .cc et .cpp en C++

Découvrez comment choisir entre les fichiers source C++ .cc et .cpp, compiler les deux avec GCC et éviter les erreurs de build lors d'un renommage.

Sur cette page

Pour des fichiers source C++ ordinaires, .cc et .cpp sont des conventions de nommage, et non deux langages C++ différents. Employez le suffixe déjà utilisé par le projet ou ses outils de build ; dans un nouveau projet, choisissez-en un et restez cohérent. GCC reconnaît les deux suffixes comme des entrées C++.

Compiler les deux suffixes avec GCC

Enregistrez ce programme sous main.cc ou main.cpp :

#include <iostream>
int main() { std::cout << "C++\n"; }

Compilez et exécutez les deux noms avec g++ :

g++ -std=c++23 main.cc -o cc.out && ./cc.out
g++ -std=c++23 main.cpp -o cpp.out && ./cpp.out

Les deux commandes affichent :

C++

Ce résultat a été vérifié sous Linux avec g++ (Ubuntu 15.2.0-16ubuntu1) 15.2.0. La documentation des options générales de GCC liste .cc et .cpp parmi les suffixes de sources C++. L’exemple requiert GCC/g++ avec C++23 ; adaptez le standard de langage à celui du projet.

Ce que change l’extension

L’extension aide le pilote du compilateur ou l’outil de build à classifier un fichier d’entrée. Elle ne transforme pas le code d’un fichier en une forme différente de C++. Un fichier .cc ou .cpp peut contenir un programme complet, des fonctions ou l’implémentation de déclarations placées dans un en-tête ; ni les en-têtes ni les classes ne sont imposés par ces suffixes.

La norme C++ n’impose pas un suffixe de fichier. Les pilotes et outils définissent leurs règles de reconnaissance : la convention d’un dépôt existant est donc plus importante qu’un stéréotype lié au système d’exploitation.

Choisir .cc ou .cpp dans un projet

Situation Choix pratique
Le dépôt et les fichiers de build utilisent déjà un suffixe Suivez ce suffixe.
Une règle du projet impose .cc Utilisez .cc ; le guide de style C++ de Google l’impose par exemple pour les sources C++.
Un nouveau projet n’a pas de règle Choisissez .cc ou .cpp et utilisez-le partout.

Aucun suffixe n’est intrinsèquement plus portable parce qu’on l’associe à un système. Vérifiez le compilateur, l’IDE et la configuration de build réellement utilisés.

Ne pas employer .c pour une source C++ ordinaire

Le pilote est déterminant. La table générale des suffixes de GCC classe .c comme entrée C. Pourtant, la documentation du pilote g++ indique que g++ traite .c, .h et .i comme du C++ sauf si -x force le langage. Sur l’hôte vérifié, cette commande a compilé le même programme C++ nommé main.c :

g++ -std=c++23 main.c -o c.out && ./c.out

Elle a affiché C++. À l’inverse, gcc -std=c23 main.c -o gcc-c.out a échoué sur ce programme : le pilote C l’a traité comme du C et n’a pas trouvé l’en-tête C++ iostream.

Ne nommez donc pas les sources C++ ordinaires .c : le résultat peut dépendre du pilote appelé par le build. Pour forcer la classification, GCC accepte -x c++ et le guide de commandes de Clang documente -x pour préciser le langage des entrées suivantes ; MSVC documente /Tp pour traiter un fichier nommé comme du C++. La configuration exacte du système de build peut varier.

Mettre à jour le build après un renommage

Renommer main.cc en main.cpp peut échouer même si le code est inchangé. CMake, les règles Make, les fichiers de projet IDE, les motifs de fichiers, les entrées générées et les scripts peuvent citer l’ancien nom ou ne reconnaître qu’un suffixe. Mettez ces références à jour, puis reconstruisez le projet pour vérifier le renommage.