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");
}
//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;
}
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
xxxxxxx
13