我知道頭文件具有在.c
文件中用於調用#include
的各種函數,結構等的前向聲明,對吧?據我明白了, 「三權分立」 發生這樣的:C頭文件和編譯/鏈接
頭文件func.h
包含的函數的前向聲明
int func(int i);
C源文件: func.c
包含實際的函數定義
#include "func.h" int func(int i) { return ++i ; }
C源文件source.c
( 「實際」 計劃):
#include <stdio.h>
#include "func.h"
int main(void) {
int res = func(3);
printf("%i", res);
}
我的問題是:看到了#include
是一個簡單的編譯器指令,副本在#include
所在文件中的.h
的內容,.c
文件如何知道如何實際執行該功能?它所得到的是int func(int i);
,所以它怎麼能實際執行該功能?它如何獲得func
的實際定義?標題中是否包含某種「指針」,表示「這是我的定義,在那邊!」?
它是如何工作的?
這就是'Linker'解決定義並確保你在編譯期間聲稱存在的事實際存在的魔力。 –
在處理頭文件時,您可能需要閱讀[include guard](http://en.wikipedia.org/wiki/Include_guard)。 –
我知道包括警衛(ifndef所有這些),但爲了簡潔省略了它們。 – Aristides