這些古董級工具不支援 C99/C11/C17/C23,殘留 `conio.h`/`graphics.h`/`void main()`/`gets()` 等毒瘤習慣,無現代除錯/靜態分析/構建系統/版本控制整合。學習階段必須用現代工具鏈,考前適應考試環境即可。
# PowerShell 管理員執行
# 1. 安裝 Scoop (現代命令行包管理器)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
# 2. 安裝核心工具鏈
scoop install gcc cmake git vscode make gdb llvm clang-format
# 3. 驗證版本 (應為最新穩定版)
gcc --version # 13.x / 14.x
cmake --version # 3.20+
gdb --version
clang --version # 17.x / 18.x
# 4. VS Code 安裝必備擴展
code --install-extension ms-vscode.cpptools # C/C++ 智能提示/除錯
code --install-extension ms-vscode.cmake-tools # CMake 整合
code --install-extension xaver.clang-format # 保存自動格式化
code --install-extension ms-vscode.hexeditor # 二進制檢視
# Ubuntu/Debian
sudo apt update && sudo apt install -y build-essential gcc gdb cmake git clang clang-format clang-tidy lldb valgrind
# Arch Linux
sudo pacman -S base-devel gcc gdb cmake git clang lldb valgrind
# Fedora
sudo dnf install -y gcc gcc-c++ gdb cmake git clang clang-tools-extra lldb valgrind
# 驗證
gcc --version && cmake --version && gdb --version
# 1. 安裝 Xcode Command Line Tools (包含 clang/lldb)
xcode-select --install
# 2. 安裝 Homebrew (包管理器)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 3. 安裝 GCC / CMake / 現代工具
brew install gcc cmake git llvm gdb valgrind
# 注意:macOS 預設 `gcc` 是 clang 別名,真正的 GCC 為 `gcc-13` 等
# 建議專案 CMake 指定編譯器:-DCMAKE_C_COMPILER=gcc-13
# 目錄結構
my_project/
├── CMakeLists.txt
├── .clang-format
├── .gitignore
├── src/
│ └── main.c
├── include/ # 公共頭文件 (可選)
└── tests/ # 單元測試 (可選)
# CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(MyProject LANGUAGES C VERSION 1.0.0)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
# 警告即錯誤
if (MSVC)
add_compile_options(/W4 /WX /permissive- /std:c17)
else()
add_compile_options(-Wall -Wextra -Wpedantic -Werror -Wconversion -Wshadow -Wstrict-prototypes -Wmissing-prototypes -fstack-protector-strong)
endif()
# Debug/Release
set(CMAKE_C_FLAGS_DEBUG "-g -O0 -fsanitize=address,undefined -fno-omit-frame-pointer")
set(CMAKE_C_FLAGS_RELEASE "-O2 -flto -DNDEBUG")
add_executable(my_app src/main.c)
# 可選:啟用 clang-tidy
# set(CMAKE_C_CLANG_TIDY "clang-tidy;-checks=*;-Wno-*;-Werror=*")
# .clang-format (LLVM 風格,4 空格縮進)
BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 100
AccessModifierOffset: -4
NamespaceIndentation: All
BreakBeforeBraces: Attach
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
# 1. 配置構建 (僅首次或 CMakeLists.txt 變更)
cmake -B build -DCMAKE_BUILD_TYPE=Debug # Debug 構建
# cmake -B build -DCMAKE_BUILD_TYPE=Release # Release 構建
# 2. 編譯
cmake --build build -- -j$(nproc) # 並行編譯
# 3. 運行
./build/my_app # Linux/macOS
build\Debug\my_app.exe # Windows (Debug)
build\Release\my_app.exe # Windows (Release)
# 4. 除錯 (VS Code F5 自動配置 launch.json)
# launch.json 關鍵配置:
# "miDebuggerPath": "gdb" (Linux/macOS) 或 "gdb.exe" (Windows MinGW)
# "setupCommands": [{ "text": "-enable-pretty-printing" }]
| 工具 | 用途 | 整合方式 |
|---|---|---|
| Clang-Tidy | 靜態分析 (Bug/風格/性能/現代化) | `CMAKE_C_CLANG_TIDY` / CI 流程 / VS Code `clang-tidy` 擴展 |
| Cppcheck | 補充靜態分析 (記憶體洩漏/資源洩漏/未初始化) | CI 步驟 `cppcheck --enable=all --std=c17 --suppress=missingIncludeSystem src/` |
| AddressSanitizer (ASan) | 運行時檢測緩衝區溢出/Use-after-free/雙重釋放 | 編譯旗標 `-fsanitize=address -fno-omit-frame-pointer` (GCC/Clang),MSVC `/fsanitize=address` |
| UndefinedBehaviorSanitizer (UBSan) | 運行時捕獲 UB (有符號溢出/移位超寬/空指標解引用/對齊/無效 enum 值) | 編譯旗標 `-fsanitize=undefined` |
| Valgrind (Memcheck/Helgrind/Callgrind) | Linux/macOS 記憶體/執行緒/性能分析重磅炸彈 | `valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./build/my_app` |
| GCOV/LCOV | 代碼覆蓋率 | 編譯 `-fprofile-arcs -ftest-coverage`,運行後 `lcov --capture --directory build --output-file coverage.info && genhtml coverage.info --output-directory coverage_html` |
| Clang-Format | 統一代碼風格 | `.clang-format` + VS Code 保存自動格式化 + CI `clang-format --dry-run --Werror src/` |
| Conan v2 / vcpkg | C/C++ 包管理 (第三方庫依賴) | `conan install . -of=build -b=missing` / `vcpkg install zlib openssl fmt` + `find_package()` |
安裝編譯器不是終點,構建「編寫 → 編譯(警告即錯誤) → 除錯 → 靜態分析 → 測試 → 格式化 → 提交」的現代工程閉環 才是起點。VS Code + GCC/Clang/MSVC + CMake + 消毒器 + 靜態分析 + CI 是當前 C/C++ 開發的黃金標準。從今天開始,用專業工具鏈寫專業代碼,您的技術深度將由此蛻變。