static用法

来源:互联网 发布:遍历js对象的属性 编辑:程序博客网 时间:2024/05/19 15:24

1、不允许对函数形参用static修饰,因为形参是要存入栈中,而static修饰的是存入静态存储区——数据段或BBS段中的

如:

void add(int a,int b,static int result);
int main(void)
{
int a = 5,b = 7;
static int result1=0;
int result2=0;
add(a,b,result1);
add(a,b,result2);
printf("a+b = %d\n",result1);
}
void add(int a,int b,static int result)
{
result = a+b;
}

结果就会报错:错误: 为形参‘result’指定了存储类

2、static 用于局部变量

则 作用范围不变,仍是局部;但生存期同全局变量,一直生存到进程结束; 而初始化语句仅初始化一次,以后此语句都会被忽略!

3、static 用于全局变量

则 不允许外部文件对其进行外部声明引用;

4、static 用于函数

        则 不允许外部文件对其进行外部声明引用;

例如:
文件1:
#include<stdio.h>
//static int an = 13;//若是将全局变量定义为static , 则外部文件就无法对其进行外部声明引用了
int an = 13;
//static void fun(void)//若是将函数定义为static , 则外部文件就无法对其进行外部声明引用了
void fun(void)
{
printf("xxxxxxx\n");
}
文件2:
#include<stdio.h>
extern int an;
extern void fun(void);

int printf_fun(void){
printf("int the main:\n");
fun();
return 0;
}
int main(void)
{
printf_fun();
printf("%d\n",an);

return 0;
}
输出结果:
int the main:
xxxxxxx
13



0 0