#include 使用| 方式 | 編譯單元 | 修改影響範圍 | 編譯速度 |
|---|---|---|---|
| 包含 .h | 各 .c 獨立編譯為 .obj | 僅修改檔重新編譯 | 快(支援增量編譯) |
| 包含 .c | 所有代碼合併為單一編譯單元 | 任何修改觸發全量重編譯 | 極慢 |
編譯器產生目標檔(.o/.obj),連結器解析外部符號引用,生成可執行檔。頭文件讓編譯器知道函數簽名,源文件提供實際代碼。
// math.h
#ifndef MATH_H
#define MATH_H
int add(int a, int b); // 宣告
#endif
// math.c
#include "math.h"
int add(int a, int b) { return a+b; } // 實作
// main.c
#include "math.h"
int main() { return add(1,2); }
守衛巨集防止重複包含,專案配置加入 math.c 而非 #include "math.c"。