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

问题描述 投票:2回答:2

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

交流转换器

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

c static global-variables
2个回答
2
投票

您没有在另一个源文件中包含源文件,您可以将它们编译并链接在一起。

在你的情况下,通过说#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将是两个独立的翻译单元。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.