我认为C语言中声明为静态的函数只有在我定义的文件中才可见.在以下示例中,静态var在另一个文件中可见.我不太确定是否是因为包括:
main.c中:
#include "test.c"
int main() {
test();
}
Run Code Online (Sandbox Code Playgroud)
test.c的:
static void test() {
// do something here
}
void foo() {
// do something different here
}
Run Code Online (Sandbox Code Playgroud)
如果它只使用头文件是不是完全没用呢?如果我想隐藏一个函数,那么我在头文件中没有提到它?!
#include是一个预处理器指令.当预处理器(在编译之前运行)看到它时,它将在那里复制包含文件的内容.所以你最终在同一个文件中.
如果它只使用头文件不是它完全没用吗?如果我想隐藏一个函数然后我不在头文件中提到它?!
当然,但在头文件中没有提到它不会"隐藏"它.头文件未编译,如果您将原型放在那里,它将作为编译器的线索.
静态函数的优点是它们在文件外部不可见 - 因为它在目标文件中不是全局的.这允许您在其他文件中使用相同的符号(名称)作为另一个东西,而不会发生冲突.
C中声明为静态的函数仅在包含的转换单元中可见,这意味着该符号不会被导出.它与文件无关,但与翻译单元无关.在你的情况下,有一个单独的翻译单元是main.c,它包含另一个文件的内容,因此定义main,test和foo; main和foo将导出,而测试则不会.