源文件副檔名
| 編譯器 | 支援副檔名 | 推薦 |
| MSVC (VC6/VS) | .cpp, .cxx, .cc | .cpp |
| GCC (g++) | .cpp, .cxx, .cc, .c++, .C | .cpp |
| Borland C++ | .cpp | .cpp |
| UNIX CC | .C, .cc, .cxx | .cc |
統一建議:使用 .cpp,通用性最佳。
主流 IDE 一鍵建置
- Visual Studio:建立 C++ 專案,
Ctrl+F5 執行。
- VS Code + C/C++ 擴充:
tasks.json 設定 g++ 或 cl.exe。
- CLion / Qt Creator / Code::Blocks / Dev-C++:內建專案模板,自動偵測編譯器。
命令列:GCC (g++) 詳解
為什麼要 g++ 而非 gcc?
gcc 是駕駛程式,根據副檔名/參數決定語言前端。
gcc main.cpp 會編譯但**連結失敗**(預設連結 C 庫,缺 C++ 標準庫)。
gcc main.cpp -lstdc++ 可行但繁瑣。
g++ 專門針對 C++:預設連結 libstdc++,預設啟用 C++ 標準庫頭文件搜尋路徑。
常用指令
# 單檔編譯執行
g++ main.cpp -o main
./main
# 多檔編譯
g++ main.cpp utils.cpp -o app
# 指定 C++ 標準
g++ -std=c++17 main.cpp -o main
# 開啟警告(強烈建議)
g++ -Wall -Wextra -pedantic main.cpp -o main
# 最佳化等級
g++ -O2 main.cpp -o main # 發布版
g++ -O0 -g main.cpp -o main # 除錯版
編譯流程圖解
graph LR
A[main.cpp] --> B[預處理器 cpp]
B --> C[編譯器 cc1plus]
C --> D[組譯器 as]
D --> E[目標檔 main.o]
F[utils.cpp] --> B
E --> G[連結器 ld]
G --> H[可執行檔 main.exe / a.out]
- 預處理:展開
#include、#define、條件編譯。
- 編譯:C++ → 組合語言。
- 組譯:組合語言 → 機器碼(目標檔
.o/.obj)。
- 連結:合併目標檔與庫,解析符號,產出可執行檔。
常見錯誤與對策
| 錯誤 | 原因 | 解決 |
| undefined reference to `std::cout' | 用 gcc 未連結 stdc++ | 改用 g++ 或加 -lstdc++ |
| fatal error: iostream: No such file | 缺 C++ 標準庫開發套件 | 安裝 libstdc++-dev / build-essential / VS Build Tools |
| main.cpp:5: error: expected ';' | 語法錯誤 | 檢查行尾分號、括號匹配 |
| multiple definition of `func' | 函數定義在頭文件且多檔包含 | 函數定義移至 .cpp,或加 inline/static |
總結
- 副檔名用
.cpp。
- 命令列首選
g++,加 -std=c++17、-Wall -Wextra。
- 理解「編譯→組譯→連結」四階段,能精準定位錯誤階段。
- IDE 只是包裝命令列,掌握底層指令才能應對複雜建置需求。