2017-07-06 54 views
-6

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

int globvar; 
static int statvariable; 

int main(void) 
{ } 

我已经定义了两个变量之一是静态和其他global.Both变量都在整个文件的范围。

所以我的另一个问题是,一般静态变量和全局变量有什么好处。

+4

你用你最喜欢的搜索引擎来搜索这个? – babon

+0

'static'在这种情况下表示变量具有内部链接,并且在文件外部不可见,而您的其他全局变量是。如果你想使用一个或另一个取决于用例。 –

+0

[Static vs global](https://stackoverflow.com/q/2271902/995714) –

回答

3

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

从C标准(6.2.2的联系标识符)

2在构成 整个程序集的翻译单元和库,具有 外部链接的特定标识符的每个声明表示相同的物体或功能。在一个 翻译单元中,每个与内部 关联的标识符声明表示相同的对象或函数。不带连接的标识符的每个声明表示一个唯一的实体。

3如果一个对象的一个​​文件范围标识符或 函数的声明包含存储类说明静态的,所述标识符 具有内部连接。

使用带内部连接的变量隐藏实现并防止与具有外部连接的同名变量冲突。

0

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