網路上流傳「C 語言已死,5 個理由讓你忘掉它」的文章,引發熱議。作者自稱 20 年 C 經驗,卻對 C 嗤之以鼻。本文不盲目捍衛 C,而是從工程實務角度,逐點分析其論點,並釐清 C 語言在現代軟體開發中的真實定位與價值。
原文觀點:malloc/free 易出錯、效能差、邊界情況多,發明 GC 的人該得諾貝爾獎。
反駁:
原文觀點:C 無同步關鍵字,單執行緒直覺全錯,除錯極難,Java 有 synchronized 尚且不夠。
反駁:
原文觀點:指標難控制、陰險,每年花數月除錯,靜態引用更好。
反駁:
原文觀點:程式設計師浪費腦細胞研究 `*p++` vs `p[i]`、移位替乘法、傳參數 vs 傳結構體。
反駁:
原文觀點:想不出 C 單元測試工具,測試不重要或太麻煩。
反駁:
| 領域 | 代表專案 | 選用 C 的核心原因 |
|---|---|---|
| 作業系統核心 | Linux, Windows NT, FreeRTOS, Zephyr, seL4 | 零執行期開銷、精確硬體控制、可移植組語 |
| 嵌入式/物聯網 | STM32 HAL, ESP-IDF, Arduino 核心, Matter 協議棧 | 資源極限(閃存 KB、RAM KB)、即時性、工具鏈普及 |
| 高效能基礎設施 | Redis, Nginx, SQLite, LevelDB, FFmpeg, OpenSSL, TensorFlow C API | 極致吞吐、延遲、記憶體效率、SIMD/硬體加速介面 |
| 編譯器/語言執行期 | GCC, LLVM/Clang, CPython, Lua, V8, JVM (HotSpot C++ 核心) | 自舉、效能、平台抽象層 |
| 系統程式/工具鏈 | Git, Docker (runC), systemd, eBPF 工具鏈 | 系統呼叫直連、二進位相容、啟動速度 |
「C 已死」是標題黨。C 語言像手術刀:在專家手中救命,在新手手中傷人。它不適合所有場合,但在其統治領域(系統軟體、嵌入式、高效能基礎設施)無可替代。現代 C 開發配合 C11/18/23 標準、靜態分析、Sanitizer、模組化架構、單元測試、CI/CD,完全能構建安全、可維護、高效能的系統。
若你從事上述領域,深入掌握 C 仍是最高投資報酬率的技能之一。若你不在這些領域,選用更高階語言才是理性決策——這與 C 是否「死」無關,只與「適合度」有關。