繁体   English   中英

header 文件中的全局变量

[英]Global variables in a header file

我只是想知道你是否像这样在 header 文件中声明一个变量

const static int START = 0; 

该变量(START)是否会被视为全局变量?

如果你定义:

const static int START = 0;

在文件 scope 中,由于static ,因此START将具有内部链接和 static 持续时间。

这意味着包含 header 的每个翻译单元最终都会得到一个符号副本,并且每个翻译单元都将存在于整个程序中。

是和不是。

假设您将该定义添加到“myvar.h”中,然后将该 header 文件包含到“main.c”和“other.c”中

'main.c' 和 'other.c' 中的所有函数都会知道定义的变量——所以在某种程度上,它是全局的。

但实际上会有两个不同的变量同名。 “main.c”中的函数所做的更改不会被“other.c”中的函数看到,反之亦然。

这是因为在函数外部定义的 static 变量被认为是“编译单元的本地变量”。

另一方面,如果您只删除“静态”关键字,则该变量将被定义两次(对于包含 header 文件的每个编译单元一次),并且 linker 将发出“重复符号”错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM