Einleitung: Eine Sprache – Dutzende Erweiterungen
\n\nWenn Sie gerade erst anfangen, C++ zu lernen, sind Sie bestimmt schon auf folgende Situation gestoßen: Sie schauen sich ein Tutorial oder ein Codebeispiel auf GitHub an und dort heißen die Dateien mal main.cpp, mal utils.cc und manchmal sogar program.cxx oder source.C. Da stellt sich die berechtigte Frage: "Wo ist da der Unterschied? Sind das verschiedene Sprachen? Oder nur eine Marotte von jemandem?"
Sie sind nicht allein. Auf Stack Overflow hat die Frage "C++ code file extension? What is the difference between .cc and .cpp" Hunderttausende von Aufrufen gesammelt. Und das ist nicht verwunderlich: Selbst erfahrene Entwickler sind manchmal verwirrt über diese scheinbaren Kleinigkeiten. Heute werden wir dieses Rätsel ein für alle Mal lösen. Sie erfahren, woher die verschiedenen Erweiterungen kommen, ob es einen technischen Unterschied gibt und welche Erweiterung ein Anfänger wählen sollte.
\n\nKurze Antwort: Es gibt keinen technischen Unterschied
\n\nLassen Sie uns gleich die wichtigste Spannung nehmen. Aus Sicht des Compilers und der Sprache C++ gibt es absolut keinen Unterschied zwischen .cc und .cpp. Es sind einfach zwei verschiedene Arten, dem Betriebssystem und den Build-Tools mitzuteilen, dass es sich um C++-Quellcode handelt.
Die Compiler (GCC, Clang, MSVC) verstehen beide Erweiterungen. Sie können eine Datei hello.cc nehmen, sie in hello.cpp umbenennen und ohne eine einzige Änderung am Code kompilieren. Hier ist ein einfaches Beispiel:
// Datei: hello.cc\n#include <iostream>\n\nint main() {\n std::cout << "Hallo aus der .cc-Datei!" << std::endl;\n return 0;\n}\n\nSie können es so kompilieren:
\ng++ hello.cc -o hello\n\nUnd jetzt benennen wir es in hello.cpp um:
g++ hello.cpp -o hello\n\nDas Ergebnis wird identisch sein. Dem Compiler ist es egal, wie die Datei heißt – wichtig ist nur ihr Inhalt und dass Sie die Sprache explizit angegeben haben (oder der Compiler sie anhand der Erweiterung erraten hat).
\n\nHerkunftsgeschichte: Woher kommen .cc und .cpp?
\n\nUm zu verstehen, warum es so viele Erweiterungen gibt, müssen wir einen Blick in die Geschichte werfen. C++ wurde als Erweiterung der Sprache C entwickelt. Die ersten Compiler (z. B. Cfront) waren lediglich Präprozessoren, die C++ in gewöhnliches C übersetzten.
\n\nDie Erweiterung .cc – Unix-Erbe
\nIn Betriebssystemen der Unix-Familie (und insbesondere in frühen Versionen von AT&T Unix) war es Tradition, kurze, zweistellige Erweiterungen zu verwenden. Dies hing mit den Beschränkungen der Dateisysteme zusammen: Beispielsweise war in s5fs (System V) die Länge von Dateinamen stark eingeschränkt. So entstanden:
\n- \n
.c– für C-Dateien \n .cc– für C++-Dateien (C + C = CC) \n .h– für Header-Dateien \n
Die Erweiterung .cc wurde zum De-facto-Standard in der Unix- und Linux-Welt. Viele große Projekte (z. B. Google Chromium, LLVM) verwenden sie bis heute.
Die Erweiterung .cpp – Die Ära von DOS und Windows
\nAls C++ in der PC-Welt an Popularität gewann, entstand das Ökosystem von DOS und frühen Windows-Versionen. Hier gab es andere Einschränkungen, aber es entstand ein anderes Bedürfnis – die Erweiterung so verständlich wie möglich zu machen. .cpp steht für C Plus Plus – ein direkter Hinweis auf die Sprache. Diese Erweiterung wurde populär durch:
- \n
- Die Entwicklungsumgebung Borland C++ \n
- Microsoft Visual C++ \n
- Lehrbücher und Bücher über C++ (damit Anfänger sofort verstehen, womit sie es zu tun haben) \n
Andere reisende Erweiterungen
\nNeben den beiden Hauptkandidaten gibt es in der C++-Welt noch andere Erweiterungen:
\n- \n
.cxx– eine weitere Variante von "C++", beliebt in einigen Unix-Systemen (z. B. IBM AIX) \n .C(großes C) – wird von einigen Compilern verwendet, um C (.c) und C++ (.C) auf Systemen zu unterscheiden, bei denen die Groß-/Kleinschreibung eine Rolle spielt (z. B. in alten