static int a和int a有什么区别?

San*_*hak 11 c

可能重复:
'全局'和'静态全局'之间的差异

语句1和2之间有什么区别: -

#include <stdio.h>
//In the global declaration area 

static int a; // 1.
int b;        // 2.
Run Code Online (Sandbox Code Playgroud)

感谢帮助.

Vic*_*let 7

一个static全局变量是本地的翻译单元它在定义的.因此,如果你定义了static int a;两种不同的翻译单位,这将创建两个独立的变量.如果int b;在两个转换单元中定义非静态全局变量,则会遇到链接器错误(但您可以extern int b;在两个转换单元之一中使用它来告诉链接器它应该使用来自其他转换单元的全局变量).


Sie*_*geX 6

两者都是变量定义,但是,static应用于"全局声明区域"中的变量的关键字限制了全局变量仅在定义它的转换单元中看到.

  • 换句话说,如果它在文件`foo.c`中,那么`bar.c`将无法访问它,即使你是`extern`它. (7认同)