Bod*_*ega 1 c static private non-static
我正在此线程上阅读有关C中的静态函数的信息:https : //stackoverflow.com/a/558201/7997108
据我了解,基本上,您在其中定义静态函数的地方是可以调用它的唯一“位置” /文件(即fileA.c即文件),这一定会使该函数对那个.c或.h文件(或翻译单位)。但是,如果您将此文件#include到其他文件(fileB.c)中,您仍然可以在那里使用它?
因此,我试图了解在哪种情况下您希望函数对自己的.c保持静态,以及如果仅通过在其定义的文件中仍然可以使用该“私有” /静态函数,该函数的意义如何。
另外,据我了解,如果您不包括定义了某些功能的其他文件,则无论如何您将无法使用/调用该功能,对吗?
换句话说,我无法理解静态函数的典型用例是什么,以及它与非静态函数的基本区别。
假设您正在编码一个库,并且需要定义一个小助手函数。也许您将此函数命名为test:
int test(int x)
{
return x > 100;
}
Run Code Online (Sandbox Code Playgroud)
此功能不是公共接口的一部分,因此您可以将其隐藏在.c文件中。一切都很好吧?
错误。
问题1:任何人都可以通过将以下声明添加到他们的代码中来使用此函数:
int test(int);
Run Code Online (Sandbox Code Playgroud)
问题2:想象一下另一个库是否具有自己的test帮助程序功能。如果该库和您的库在同一程序中使用,则链接器将出错,因为两个函数不能具有相同的名称。
解决方法是使用static。使用时static,功能对于其翻译部门是唯一的,并且不会在全局范围内公开。
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |