![](/img/trans.png)
[英]Can we declare a file scope identifier with internal linkage without the static keyword?
[英]Internal linkage with static keyword in C
我知道static
是C中的一个重载关键字。在这里,我只关心它作为一个关键字用来强制内部链接。
如果在.c
文件中声明了全局变量,那么使用static
和不使用static
什么区别? 无论哪种方式,没有其他.c
文件可以访问该变量,因此该变量基本上是文件的“私有”,有或没有static关键字。
例如,如果我有一个文件foo.c
,并且我声明了一个全局变量:
int x = 5;
该变量x
仅适用于foo.c
代码(当然,除非我在某个带有extern
关键字的共享头文件中声明它)。 但是如果我没有在头文件中声明它,那么如果我输入的话会有什么不同:
static int x = 5
。
无论哪种方式,似乎x
在这里有内部联系。 所以我对static
的目的很困惑。
如果在
.c
文件中声明了全局变量,那么使用static
和不使用static
什么区别? 无论哪种方式,没有其他.c
文件可以访问变量[...]
一个不同的文件可以声明 x
:
extern int x;
这将允许引用x
代码进行编译,然后链接器会愉快地将这些引用链接到它找到的任何x
。
static
通过阻止x
在其翻译单元外部可见来防止这种情况。
只有一个“命名空间”,可以这么说,在C.没有“static”关键字,您不会使用名称“x”保护其他文件(即使您没有在自己的库的标题中显示它)。
尝试将包含非静态变量x
几个C文件链接在一起(对每个文件中的函数进行交错读写访问),并将这些变量声明为静态的情况进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.