我对 C 中 static functions 的用途有点困惑,如果有人能解释一下那就太好了! :)
我知道 static functions 用于限制 function 的可见性,但为什么要使用它?
回答1
大型程序由多个子组件构建而成,这些子组件可能位于一家公司内的不同源文件组中,也可能位于第三方供应商提供的库中。
当一个 function 没有用 static
声明时,它的标识符有外部链接。这意味着标识符的任何两个实例都将被链接以引用相同的 function。
有时我们不希望这样。一个为程序的一部分写东西的人可能会调用一个 function 他们使用 CalculateSquare
因为它计算复数的平方,而另一个为程序的另一部分写东西的人可能会调用一个 function CalculateSquare
因为它计算几何正方形的一些属性。如果这两个标识符都有外部链接,这通常会由于多个定义而导致链接错误,或者更糟糕的是,链接一个定义而不是另一个没有错误消息(当一个定义在库文件中时可能发生这种情况)。
当一个 function 用 static
声明时,它的标识符有内部链接。这意味着在同一翻译单元内使用其标识符,在其声明之后,将引用该 function,但在其他翻译单元中使用相同标识符将不会引用该翻译单元中的 function。这允许程序员更自由地选择他们的名字,而不必担心与其他程序员使用的名字发生冲突。
(还有其他方法可以避免多个定义错误。链接器通常具有控制其输出文件中符号的发布和使用的命令,有时必须使用这些命令,并且可能提供仅使用 static
无法提供的功能。但是,使用 static
是在许多情况下处理此问题的标准且简单的方法。)