【发布时间】:2014-08-22 01:15:46
【问题描述】:
如果函数声明不在头文件 (.h) 中,而只在源文件 (.c) 中,为什么需要使用 static 关键字?当然,如果你只在一个 .c 文件中声明它,它不会被其他文件看到,因为你不应该#include .c 文件,对吧?
【问题讨论】:
-
在/不在标题中不会影响可访问性,只会影响可见性。当您声明一个函数
static时,链接器将不允许该函数满足某个其他模块的链接需求。如果你把关键字去掉,然后在另一个模块中声明函数(就像你在头文件中一样),你可以链接到它。 -
对,所以我猜在小项目中(我是初学者!)这不太可能发生,因为你会知道你所有的函数都被调用了什么以及你在哪里声明了它们,但是在一个更大的项目中,你可能会两次声明一个同名的函数……?
-
基本上是为了避免命名空间冲突。熟悉在不需要全局可见性的任何地方使用
static,否则您最终可能会在不同的编译单元中为不同的目的定义相同的名称。链接器 - 只看到名称 - 将假定它是相同的符号,您可能想知道奇怪的值...