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 專案檔、檔名模式、產生的建置輸入及指令碼可能列出舊名稱,或只符合其中一種副檔名。請更新這些參照,然後重新建置專案以驗證更名。