文件file.h中定义了以下函数:
static void fun(void)
{
printf("Hello world\n");
}
该文件file.c包含以下代码,可以正常运行:
#include "file.h"
int main()
{
func();
return 0;
}
实际上问题是 - 为什么函数fun()在头文件之外可见,如果它应该只在文件内部可见file.h?
文件file.h中定义了以下函数:
static void fun(void)
{
printf("Hello world\n");
}
该文件file.c包含以下代码,可以正常运行:
#include "file.h"
int main()
{
func();
return 0;
}
实际上问题是 - 为什么函数fun()在头文件之外可见,如果它应该只在文件内部可见file.h?
静态函数的实例仅在一个编译单元中可见(Linux 中为 .h + .c => .o)。
头文件没有被编译,而是添加到源代码的编译文本中
.c。并且由于您将此函数写入头文件,因此将实现函数实例的数量,作为使用包含此头文件的编译次数。并且在每个编译单元中,静态函数看不到另一个实例。
答:函数
fun对于编译单元是静态的,而不是头文件。