【发布时间】:2019-03-06 05:03:33
【问题描述】:
我在一个文件中声明了一个全局静态函数
交流
static void Func1(void);
void Func2(void);
void Func1(void) {
puts("Func1 Called");
}
void Func2(void) {
puts("Func2 Called");
}
并在 b.c 中访问它
#include <stdio.h>
#include "a.c"
void main() {
Func1();
Func2();
}
程序成功编译,但根据提供的信息,这应该会给出错误:undefined reference to Func1。这里出了什么问题?
【问题讨论】:
-
当您包含
a.c时,静态函数是在当前翻译单元或TU 中定义的。这些函数对 TU 中的代码可见。这就是为什么你通常包含标题而不是源代码的原因。 -
#include "a.c"...这不是您使用源文件的方式。您将它们编译并链接在一起,您不会将它们包含在其他源文件中! -
不要
#includec 源文件。而是分别编译它们,然后将它们链接在一起。编写一个头文件,其中包含跨文件所需的任何东西的原型和外部语句,并将该头文件包含在需要这些跨文件引用的每个文件中,包括包含实际引用的文件
标签: c static global-variables