【发布时间】:2011-02-27 18:23:58
【问题描述】:
我想知道在 C 语言中使用 static 关键字作为文件中变量的范围限制。
在我看来,构建 C 程序的标准方法是:
- 有一堆定义函数和变量的 c 文件,可能范围受限于
static。 - 有一堆h文件声明了相应c文件的函数和可能的变量,供其他c文件使用。私有函数和变量未在 h 文件中发布。
- 每个 c 文件都单独编译成一个 o 文件。
- 所有 o 文件都链接到一个应用程序文件。
如果变量未在 h 文件中发布,我看到将 gobal 声明为 static 的两个原因:
- 一个是为了可读性。通知未来的读者,包括我自己,任何其他文件都没有访问变量。
- 二是防止另一个c文件将变量重新声明为
extern。我想链接器不喜欢既是extern又是static的变量。 (我不喜欢文件将其他人拥有的变量重新声明为extern的想法,这样可以吗?)
还有其他原因吗?
static 函数也是如此。如果原型没有发布在 h 文件中,其他文件可能无论如何都不会使用该功能,那为什么要定义它static 呢?
我可以看到相同的两个原因,但仅此而已。
【问题讨论】:
-
六年后,我现在知道
static不限制范围,它提供了内部链接。如果您将翻译单元视为一个范围,则类似,但不是正确的术语。