1、看例子如下:
int tern=1;
main()
{
extern int tern;
......
这里tern 声明了两次,第一次声明为变量留出了存储空间。它构成了变量的定义。第二次声明只是告诉编译器使用先前定义的变量tern,因此不是一个定义。第一次声明称为定义声明,第二次声明称为引用声明,关键字extern表明该声明不是一个定义,因此它指示编译器参考其他地方。而且extern是一个引用声明,绝不是定义声明,所以不可用它进行定义操作。木有这种的操作的哦。
2、具有内部链接的静态变量
这种存储类的变量具有静态存储时期、文件作用域以及内部链接。通过使用存储类说明符static在所有函数外部进行定义。
static int svil=1;//具有内部链接的静态变量
int main(){
}
以前这类变量称为外部静态变量,但因为它具有内部链接,所以现在用 具有内部链接的静态变量来形容,普通的外部变量可以被程序的任一文件中所包含的函数使用,而具有内部链接的静态变量只可以被与他在同一文件中的函数使用。
3、存储类说明符
c语言中有5个作为存储类说明符的关键字。他们分别是:auto、register、static、extern以及typedef。
实例程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
//parta.c 各种存储类
#include<stdio.h>
void
report_count();
void
accumulate (
int
k);
int
count=0;
//文件作用域,外部链接
static
int
total=0;
int
main(
void
)
{
int
value;
//自动变量
register
int
i ;
//寄存器变量
printf
(
"enter a positive interger(0 to quit):"
);
while
(
scanf
(
"%d"
,&value)==1 && value>0)
{
++count;
//使用文件作用域变量
for
(i=value;i>=0;i--)
accumulate (i);
printf
(
"enter a positive interger(0 to quit):"
);
}
}
void
report_count()
{
printf
(
"loop excuted %d times\n"
,count);
}
void
accumulate(
int
k){
static
int
subtotal =0;
if
(k<=0){
printf
(
"loop cycle :%d\n"
,count);
printf
(
"subtotal: %d; total: %d\n"
, subtotal,total);
subtotal=0;
}
else
{
subtotal +=k;
total+=k;
}
}
|
运行结果:
本文转自 lillian_trip 51CTO博客,原文链接:http://blog.51cto.com/xiaoqiaoya/1955744,如需转载请自行联系原作者