下面的代码段说明了变量和形式参数声明中怨念或者省略存储类型的所有可能的方法。
int a;
extern int b;
static int c;
void f(int d, register int e)
{
auto int g;
int h;
static int i;
extern int j;
register int k;
}
下表说明了上述例子中每个变量和形式参数的性质。
名字 | 存储期限 | 作用域 | 链接 |
a | 静态 | 文件 | 外部 |
b | 静态 | 文件 | ① |
c | 静态 | 文件 | 内部 |
d | 自动 | 块 | 无 |
e | 自动 | 块 | 无 |
g | 自动 | 块 | 无 |
h | 自动 | 块 | 无 |
i | 静态 | 块 | 无 |
j | 静态 | 块 | ① |
k | 自动 | 块 | 无 |
①由于这里没有显示出变量b
和j
的定义,所以不能确定它们的链接。在大多数情况下,变量会定义在另一个文件中,并且具有外部链接。
在这4
种存储类型之中,最重要的是extern
和static
。auto
没有任何效果,而现代编译器已经使register
变得不如以前重要了。