1.static和extern 对于函数
函数的类型
a.外部函数:定义的函数能被本文件和其他文件访问,默认情况下所有函数都是外部函数;
*注意点:不允许有同名的外部函数;
b.内部函数:定义的函数只能被本文件访问,其他文件不能访问;
外部函数的声明与定义
// 完整地声明一个外部函数,默认情况下省略extern
extern void test();
// 完整地定义一个外部函数,默认情况下省略extern
extern void test()
{}
内部函数的声明与定义
// 声明一个内部函数
static void test1();
// 定义一个内部函数
static void test1()
{}
2.static 和extern 对于全局变量
全局变量的分类:
a.外部变量:定义的变量能被本文件和其他文件访问;
*注意点:1> 默认情况下,所有的全局变量都是外部变量;
2> 不同文件中的同名外部变量,都代表着同一个变量;
b.内部变量:定义的变量只能被本文件访问,不能被其他文件访问;
*注意点:1> 不同文件的同名变量,互不影响;
内部变量的定义
static int a;
外部变量的声明
extern int a;
比如:
extern int a;
int main()
{
a = 10;
printf("a is %d\n",a);
}
int a;
如果不通过extern int a 声明,那么该代码就会报错;
3.static 和extern 对于局部变量
static 修饰局部变量:
a.延长局部变量的生命周期,当程序结束时,才会销毁;
b.没有改变局部变量的作用域;
比如:
void test()
{
static int a;
a++;
printf("a is %d\n",a);
}
int main()
{
test();
test();
return 0;
}
以上代码输出结果一次为: a is 1和 a is 2。
static 修饰局部变量的使用场合
a.如果某个函数的调用频率特变高;
b.而且这个函数内的某个变量是固定不变的;