HOWTO · C++

C++ 中 .cc 和 .cpp 副檔名之間的區別

了解如何在 C++ .cc 與 .cpp 原始碼檔案之間選擇、用 GCC 編譯兩種副檔名,以及重新命名時為何要更新建置設定。

本頁內容

對一般 C++ 原始碼檔案而言,.cc 和 .cpp 是命名慣例,而不是不同的 C++ 語言。請使用專案或其建置工具已採用的副檔名;新專案則選一種並一致使用。GCC 會把兩種副檔名都辨識為 C++ 輸入。

用 GCC 編譯兩種副檔名

將以下程式儲存為 main.cc 或 main.cpp:

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

用 g++ 編譯並執行兩個檔名:

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

兩個命令都會輸出:

C++

此結果已在 Linux 上的 g++ (Ubuntu 15.2.0-16ubuntu1) 15.2.0 驗證。GCC 的整體選項文件將 .cc 與 .cpp 都列為 C++ 原始碼副檔名。此範例需要支援 C++23 的 GCC/g++;若專案要求其他語言標準,請使用該標準。

副檔名改變的是什麼

副檔名協助編譯器驅動程式或建置工具分類輸入檔。它不會讓一個檔案中的程式碼成為另一種 C++。.cc 或 .cpp 檔案可以包含完整程式、函式,或標頭檔中宣告項目的實作;兩種副檔名都不要求使用標頭檔或類別。

C++ 標準沒有強制任何特定副檔名。辨識規則由編譯器驅動程式與工具定義,因此既有儲存庫的慣例比依作業系統做出的概括說法更重要。

在專案中選擇 .cc 或 .cpp

情況 實用選擇
儲存庫與建置檔已使用一種副檔名 遵循該副檔名。
專案規則要求 .cc 使用 .cc;例如 Google C++ Style Guide 為 C++ 原始碼指定 .cc。
新專案沒有規則 選擇 .cc 或 .cpp,並一致使用。

不能只因某副檔名與特定作業系統相關,就說它本質上更具可攜性。請檢查專案實際使用的編譯器、IDE 與建置設定。

不要把 .c 當作一般 C++ 檔名

此處驅動程式很重要。GCC 的一般副檔名表將 .c 分類為 C 輸入;不過,g++ 驅動程式文件說明,除非 -x 覆寫語言,g++ 會將 .c、.h 與 .i 輸入視為 C++。在已驗證的主機上,將同一個 C++ 程式命名為 main.c 後,以下命令仍能編譯:

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

它輸出 C++。相反地,gcc -std=c23 main.c -o gcc-c.out 對此程式會失敗,因為 C 驅動程式將它當成 C,找不到 C++ 標頭 iostream。

這就是不應將一般 C++ 原始碼命名為 .c 的原因:結果可能取決於建置呼叫哪一個驅動程式。若必須覆寫副檔名推斷,GCC 接受 -x c++;Clang CommandGuide 說明 -x 可指定後續輸入的語言。MSVC 文件中的 /Tp 可強制把指定檔案當作 C++。實際的建置系統設定可能不同。

重新命名時更新建置設定

即使程式碼不變,將 main.cc 改名為 main.cpp 仍可能失敗。CMake、Make 規則、IDE 專案檔、檔名模式、產生的建置輸入及指令碼可能列出舊名稱,或只符合其中一種副檔名。請更新這些參照,然後重新建置專案以驗證更名。