Introduction : Un langage, des dizaines d'extensions
\n\nSi vous commencez tout juste à apprendre le C++, vous avez sûrement déjà rencontré cette situation : vous regardez un tutoriel ou un exemple de code sur GitHub, et les fichiers s'appellent tantôt main.cpp, tantôt utils.cc, et parfois même program.cxx ou source.C. Une question légitime se pose : "Quelle est la différence ? S'agit-il de langages différents ? Ou simplement d'un caprice de quelqu'un ?"
Vous n'êtes pas seul. Sur Stack Overflow, la question "C++ code file extension? What is the difference between .cc and .cpp" a recueilli des centaines de milliers de vues. Et ce n'est pas surprenant : même les développeurs expérimentés se trompent parfois sur ces détails apparemment insignifiants. Aujourd'hui, nous allons une fois pour toutes démêler cette énigme. Vous découvrirez d'où viennent ces différentes extensions, s'il existe une différence technique entre elles et quelle extension un débutant devrait choisir.
\n\nRéponse courte : aucune différence technique
\n\nDissipons tout de suite la principale tension. Du point de vue du compilateur et du langage C++, il n'y a absolument aucune différence entre .cc et .cpp. Ce sont simplement deux manières différentes d'indiquer au système d'exploitation et aux outils de compilation qu'il s'agit de code source C++.
Les compilateurs (GCC, Clang, MSVC) comprennent les deux extensions. Vous pouvez prendre un fichier hello.cc, le renommer en hello.cpp et le compiler sans aucune modification du code. Voici un exemple simple :
// Fichier : hello.cc\n#include <iostream>\n\nint main() {\n std::cout << "Bonjour depuis le fichier .cc !" << std::endl;\n return 0;\n}\n\nVous pouvez le compiler ainsi :
\ng++ hello.cc -o hello\n\nEt maintenant, renommons-le en hello.cpp :
g++ hello.cpp -o hello\n\nLe résultat sera identique. Le compilateur se moque du nom du fichier — seuls son contenu et le fait que vous ayez explicitement spécifié le langage (ou que le compilateur l'ait déduit de l'extension) importent.
\n\nOrigine historique : d'où viennent .cc et .cpp ?
\n\nPour comprendre pourquoi il existe autant d'extensions, il faut se pencher sur l'histoire. Le C++ a été créé comme une extension du langage C. Les premiers compilateurs (par exemple, Cfront) n'étaient que des préprocesseurs qui traduisaient le C++ en C standard.
\n\nL'extension .cc — héritage Unix
\nDans les systèmes d'exploitation de la famille Unix (et en particulier dans les premières versions d'AT&T Unix), la tradition était d'utiliser des extensions courtes, à deux caractères. Cela était dû aux limitations des systèmes de fichiers : par exemple, dans s5fs (System V), la longueur des noms de fichiers était fortement restreinte. Ainsi sont apparus :
\n- \n
.c— pour les fichiers C \n .cc— pour les fichiers C++ (C + C = CC) \n .h— pour les fichiers d'en-tête \n
L'extension .cc est devenue la norme de facto dans le monde Unix et Linux. De nombreux grands projets (par exemple, Google Chromium, LLVM) l'utilisent encore aujourd'hui.
L'extension .cpp — l'ère DOS et Windows
\nLorsque le C++ a commencé à gagner en popularité dans le monde PC, l'écosystème DOS et des premières versions de Windows est apparu. Les limitations y étaient différentes, mais un autre besoin s'est fait sentir : rendre l'extension aussi claire que possible. .cpp signifie C Plus Plus — une indication directe du langage. Cette extension est devenue populaire grâce à :
- \n
- L'environnement de développement Borland C++ \n
- Microsoft Visual C++ \n
- Les tutoriels et livres sur le C++ (pour que les débutants comprennent immédiatement de quoi il s'agit) \n
Autres extensions voyageuses
\nOutre les deux principaux prétendants, on peut rencontrer d'autres extensions dans le monde du C++ :
\n- \n
.cxx— une autre variante de "C++", populaire dans certains systèmes Unix (par exemple, IBM AIX) \n .C(C majuscule) — utilisée par certains compilateurs pour distinguer le C (.c) du C++ (.C) sur les systèmes où la casse est significative (par exemple, dans les anciens