將所有頭文件與預處理指令集中放在一個 .c 文件中,其他源文件僅 #include "all.h",導致編譯報錯或符號重複定義。
module.h 宣告介面,module.c 實現細節。extern 變量、類型定義、宏;嚴禁放定義(函數體、非 extern 變量)。module.c 首行 #include "module.h",編譯器自動檢查宣告與定義一致性。main.c 中 #include "module.h" 即可調用該模塊函數。gcc -c module.c 生成 .o,最後 gcc main.o module.o -o app 鏈接。project/
├── include/
│ ├── common.h // 通用宏、類型
│ ├── stack.h // 棧介面
│ └── queue.h // 隊列介面
├── src/
│ ├── common.c
│ ├── stack.c
│ └── queue.c
├── main.c
└── Makefile
| 錯誤做法 | 後果 | 正確做法 |
|---|---|---|
| 所有 #include 集中在一個 .c | 符號重複、編譯依賴混亂 | 各模塊獨立 .h/.c |
| 頭文件放函數定義 | 多文件包含導致重複定義 | 頭文件只放宣告,定義在 .c |
| 缺少 include guard | 重複包含報錯 | #ifndef MODULE_H #define MODULE_H ... #endif |
| 源文件不包含自已頭文件 | 宣告定義不一致無法檢測 | #include "module.h" 放第一行 |
.c 加入專案,IDE 自動編譯鏈接;屬性頁「C/C++ → General → Additional Include Directories」加入 include 目錄。遵循「高內聚、低耦合、介面與實現分離」原則,工程規模再大也能清晰可控。