c中全局变量和静态变量之间的差异

时间:2017-07-06 16:33:49

标签: c static global-variables

我想知道静态变量和全局变量之间的区别。假设在我的情况下

int globvar;
static int statvariable;

int main(void)
{ }

我已经定义了两个变量,一个是静态的,另一个是全局的。变量在整个文件中都有它们的范围。

所以我的另一个问题是静态变量在整体和全局变量中的好处是什么。

2 个答案:

答案 0 :(得分:3)

这两个变量都是“全局的”。两者都具有静态存储持续时间。区别在于第一个具有外部链接,第二个具有内部链接,即在声明它的编译单元外部它是不可见的。如果具有内部链接的变量的声明包含在多个编译单元中,那么它们中的每一个都有自己的具有此名称的唯一变量。

来自C标准(6.2.2标识符链接)

  

2在构成一个翻译单元和库的集合中   整个程序,每个特定标识符的声明   外部链接表示相同的对象或功能。在一个   翻译单位,每个内部标识符的声明   连接表示相同的对象或功能。每个声明   没有链接的标识符表示唯一的实体。

  

3如果声明对象的文件范围标识符或   function包含存储类说明符static,标识符   有内部联系。

使用具有内部链接的变量会隐藏实现并防止与具有相同名称的变量与外部链接发生冲突。

答案 1 :(得分:0)

static仅在当前文件范围中可见。另外一个在程序范围内是可视的(例如你可以在链接在一起的其他文件中使用它们)