C-全局静态函数仍在另一个文件中工作



我在一个文件中声明了一个全局静态函数

a.c

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。这里发生了什么问题?

您不在另一个源文件中包含一个源文件,而是将它们链接在一起。

在您的情况下,通过说#include "a.c",您实际上将a.c的全部内容放入b.c中,然后启动汇编,因此static函数及其呼叫在同一翻译单元中存在。因此,编译器可以找到所谓的函数没有问题。

相反,如果您做

之类的事情
gcc a.c b.c -o a.out //try to compile and link together

您会看到预期的错误,例如在这种情况下,a.cb.c将是两个单独的翻译单元。

您在header文件中声明并在.c文件中定义。因此,您必须使用标头文件来表示您定义的变量或功能。相反,如果您使用.c文件,则会导致多个定义。我认为这就是为什么您可以访问该全局函数的原因。

相关内容

  • 没有找到相关文章