我想知道在static
C 中使用关键字作为文件中变量的范围限制。
在我看来,构建 C 程序的标准方法是:
- 有一堆定义函数和变量的 c 文件,可能范围受限于
static
. - 有一堆 h 文件声明相应 c 文件的函数和可能的变量,供其他 c 文件使用。私有函数和变量不在 h 文件中发布。
- 每个 c 文件都单独编译成一个 o 文件。
- 所有 o 文件都链接到一个应用程序文件。
static
如果变量没有在 h 文件中发布,我看到将 gobal 声明为的两个原因:
- 一是为了可读性。通知包括我自己在内的未来读者,在任何其他文件中都没有访问变量。
- 第二个是防止另一个 c 文件将变量重新声明为
extern
. 我想链接器不喜欢既是extern
and的变量static
。(我不喜欢文件将其他人拥有的变量重新声明为的想法,extern
这可以练习吗?)
还有什么原因吗?
函数也是如此static
。如果原型没有在 h 文件中发布,其他文件可能无论如何都不会使用该功能,那为什么要定义它static
呢?我可以看到相同的两个原因,但仅此而已。