.c/.cpp、.h/.hpp 文件的集合,邏輯上構成完整程序。.obj (Windows) / .o (Linux),包含機器碼、符號表、重定位信息。.exe / out。
源文件 A.cpp ──編譯──→ A.obj
源文件 B.cpp ──編譯──→ B.obj
源文件 C.cpp ──編譯──→ C.obj
│
▼
鏈接器
│
▼
程序.exe
A.cpp 只需重新編譯 A.obj,再鏈接,節省時間。.h 聲明接口,.cpp 實現細節,降低耦合。A.obj: A.cpp A.h。cl /c A.cpp / g++ -c A.cpp。.vcxproj,Qt 用 .pro,CMake 生成原生構建文件。非 static 函數默認外部鏈接,符號對所有目標文件可見。
A.cpp 定義 void foo() → A.obj 導出符號 foo。B.cpp 聲明 extern void foo(); 或包含 A.h → 調用 foo()。B.obj 對 foo 的引用 → 綁定到 A.obj 的定義。static 函數/變量:內部鏈接,符號不導出,僅本目標文件可見,避免符號衝突。
「多個源文件不就能通用函數了嗎,為什麼還分能否被調用?」
**能否被調用 = 是否聲明 + 鏈接時能否解析符號**。
.h 放聲明,所有需調用文件 #include,鏈接時包含定義所在 .obj。源程序 = 多源文件集合。編譯器逐文件生成目標文件,鏈接器按依賴圖合併生成可執行文件。**Makefile/構建系統描述依賴與命令**,實現增量構建。函數跨文件調用需:聲明可見 + 定義鏈接。理解此流程是掌握 C/C++ 工程化的基石。