- 如果有两个源文件 a.c 和 b.c ,如果 a.c 中想使用 b.c 中定义的函数,可以在 a.c 中声明 extern func();
- 或者是在 a.c 和 b.c 共同的头文件 common.h 中将 b.c 中定义的函数声明为 extern func();
- 使用上面第一种方法:
编译并运行得到:gcc a.c b.c -o test
首先我们明白的是,这里不需要头文件,仅仅是两个源文件,也可以做到在 a.c 中访问到 b.c 中的函数定义,是因为c中是每个源文件都是单独编译的,a.c 和 b.c 都编译生成了目标文件,然后是链接,由于在 a.c 中声明了 func 是 extern 的,所以在链接的时候,a.c 的目标文件去链接的时候会链接到 b.c 编译生成的目标文件中的 func 函数处。
- 当然将该函数可以声明到 a.c 和 b.c 共同的头文件中
- 在头文件中声明的全局变量一定要加 extern ,而全局函数并不需要一定要加 extern
6. 为什么头文件中只能声明全局变量而不能定义,看下面的链接:
https://my.oschina.net/mavericsoung/blog/123469