1.static可以改变局部变量的生命周期
int main()
{
{
int a;
{
static int b;
}
}
return 0;
}
a的生命周期只在第二个大括号内部,进入生命周期开始,退出第二个大括号 生命周期结束。
但是b因为被static修饰,他的生命周期是整个程序,但是作用域不变,仍然是第三个大括号内部。
2.extern声明的变量可以在整个源文件中使用,但是只有包含用extern声明的文件才可以使用此变量,其他如果没有声明则不能被使用。
#include <stdio.h>
#include "add.h"
extern int a;
extern int i;
extern int j;
int main()
{
add();
printf("%d\n", a);
printf("%d\n", i);
printf("%d\n", j);
return 0;
}
变量a,i,j在add的源文件中声明,在main这个源文件这里可以使用,但其他没有用extern声明的源文件中不能使用,但也可以在头文件中用extern声明,这样包含这个头文件的源文件都可以使用这些变量。
3.不能用static和extern同时修饰一个变量
全局变量具有外部链接属性,static修饰全局变量以后,外部链接属性就变为内部链接属性,其他的c文件也无法使用此变量。
static与extern对函数的作用同理