我知道头文件具有在.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