1.static修饰的函数在源文件中定义并在头文件中声明
1、如果在其他多个其他源文件中包含这个头文件,但没有使用static修饰的函数,编译可以正常通过
2、如果在其他多个其他源文件中包含这个头文件,并使用static修饰的函数,编译当然会直接报错,因为链接器找不到函数的定义
此时因为static的内链接性,在其他文件中找不到它的定义
2.static修饰的函数在头文件中声明并完成实现
如果在其他多个其他源文件中包含这个头文件,因为#include在预处理只是简单展开,每个源文件实际上都得到了这个静态函数的一个私有副本。每个源文件都包含了该函数的完整定义,并在编译时独立生成该函数的代码。由于
static
修饰符的作用,链接器不会试图将这些不同的函数定义合并成一个或检查它们的重定义。此时虽然在各自.c文件中static修饰的函数还具有内链接性,但明显与最初的初衷背离,反而徒增了许多不必要的拷贝
3. 总结
如果在头文件中 直接实现static
函数确实可以使其在其他源文件可用,但可能导致代码膨胀等等问题。