我有一个两C files.
file1.c
int main()
{
func();
return 0;
}
file2.c
static void func(void)
{
puts("func called");
}
但是,如果我用命令编译上面的代码cc file2.c file1.c
,我得到了以下内容,
undefined reference to `func'
collect2: error: ld returned 1 exit status
但是,如果我删除static
里面的关键字file2.c并使用命令编译上面的代码cc file2.c file1.c
,运行成功。
所以,我有一个问题,C 中 void 和 static void 函数有什么区别?
C 中 void 和 static void 函数有什么区别?
真正的问题应该是两者之间的区别是什么static
and non-static
功能? (返回类型void
是无关紧要的,它可以是int
或其他任何东西)。
The static
关键字有点过度使用。当它应用于函数时,意味着该函数具有内部联系 https://stackoverflow.com/questions/1358400/what-is-external-linkage-and-internal-linkage-in-c,即其范围限制在翻译单位 https://stackoverflow.com/questions/8342185/translation-unit-in-c-and-c(简单地作为源文件)。
默认情况下,函数是非静态的并且具有外部链接。该函数可以由不同的源文件使用。
在您的情况下,错误会自行显现,因为static func
不能在其他源文件中使用。
什么时候应该static
可以使用函数吗?
static
函数通常用于避免较大项目中的名称冲突。如果您检查 Linux 内核源代码,例如drivers/net
你会看到很多static void
里面有函数。驱动程序由不同的供应商开发,并且使用static
函数确保他们可以按照自己想要的方式命名函数,而不必担心与其他不相关的驱动程序开发人员发生名称冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)