11

我知道static是 C 中的重载关键字。在这里,我只对将其用作强制内部链接的关键字感兴趣。

如果您在文件中声明了一个全局变量,那么 using和 not using有什么.c区别?无论哪种方式,没有其他文件可以访问该变量,因此该变量基本上是文件的“私有”,有或没有 static 关键字。staticstatic.c

例如,如果我有一个文件foo.c,并且我声明了一个全局变量:

int x = 5;

该变量x仅可用于内部代码foo.c(当然,除非我在某些共享头文件中使用extern关键字声明它)。但是,如果我不在头文件中声明它,那么如果我输入以下内容会有什么区别:

static int x = 5.

无论哪种方式,这里似乎x都有内部联系。所以我static对这方面的目的感到困惑。

4

2 回答 2

13

如果您在文件中声明了一个全局变量,那么 using和 not using有什么.c区别?无论哪种方式,没有其他文件可以访问变量 [...]staticstatic.c

一个不同的文件可以声明 x

extern int x;

这将允许代码引用x编译,然后链接器会愉快地将这些引用链接到x它找到的任何引用。

static通过防止x在其翻译单元之外可见来防止这种情况。

于 2010-08-19T19:44:23.103 回答
6

可以这么说,在 C 中只有一个“命名空间”。如果没有“静态”关键字,您就不会受到使用名称“x”的另一个文件的保护(即使您没有使其在您自己的库的标题中可见)。

尝试将几个包含非静态变量的 C 文件链接在一起x(从每个文件中的函数交错读取和写入访问),并与这些变量声明为静态的情况进行比较。

于 2010-08-19T19:43:32.260 回答