c - static functions 在 C 中的优点?

我对 C 中 static functions 的用途有点困惑,如果有人能解释一下那就太好了! :)

我知道 static functions 用于限制 function 的可见性,但为什么要使用它?

回答1

大型程序由多个子组件构建而成,这些子组件可能位于一家公司内的不同源文件组中,也可能位于第三方供应商提供的库中。

当一个 function 没有用 static 声明时,它的标识符有外部链接。这意味着标识符的任何两个实例都将被链接以引用相同的 function。

有时我们不希望这样。一个为程序的一部分写东西的人可能会调用一个 function 他们使用 CalculateSquare 因为它计算复数的平方,而另一个为程序的另一部分写东西的人可能会调用一个 function CalculateSquare 因为它计算几何正方形的一些属性。如果这两个标识符都有外部链接,这通常会由于多个定义而导致链接错误,或者更糟糕的是,链接一个定义而不是另一个没有错误消息(当一个定义在库文件中时可能发生这种情况)。

当一个 function 用 static 声明时,它的标识符有内部链接。这意味着在同一翻译单元内使用其标识符,在其声明之后,将引用该 function,但在其他翻译单元中使用相同标识符将不会引用该翻译单元中的 function。这允许程序员更自由地选择他们的名字,而不必担心与其他程序员使用的名字发生冲突。

(还有其他方法可以避免多个定义错误。链接器通常具有控制其输出文件中符号的发布和使用的命令,有时必须使用这些命令,并且可能提供仅使用 static 无法提供的功能。但是,使用 static 是在许多情况下处理此问题的标准且简单的方法。)

相似文章

c++ - 已经在 dllmain.obj 中定义

我正在尝试清理一些代码,将某些部分移动到.h和.cpp文件中。问题是当我尝试编译时,我得到一个“已经定义”的错误。我知道有几个像这样的问题。但是我已经检查了几次,我没有看到任何重复的定义,也看不到它所...