1、对函数有效 2、对变量有效
一、对函数的作用
函数的分类 外部函数: 1、定义的函数能本文件和其他文件访问(默认情况下,所有的函数都是外部函数) 2、extern的作用 完整的定义外部函数和完整的声明外部函数 3、不可以在多文件中定义多个同名的的外部函数
内部函数: 1、定义的函数智能本本文件访问。 2、static的作用是定义内部函数和声明内部函数 3、允许不同文件中有同名的内部函数。
下面3个文件 1、main.c文件 #include <stdio.h> #include "test.h" int main() { test(); return 0; } 2、test.h文件 #ifndef_TEST_H_ #define_TEST_H_ //完整的声明外部函数,加上extern //因为默认所有的函数都是外部函数,所以extern可以省略 extern void test(); #endif 3、test.c文件 #include <stdio.h>
//完整的声明内部函数 static voidtest2();
//加上extern才是完整的定义外部函数 //因为默认所有的函数都是外部函数,所以extern可以省略 extern void test() { printf("调用了test函数\n"); test2(); }
//定义内部函数,必须加static static void test2() { printf("调用了test2内部函数\n"); } main.c文件可以通过包含了test.h文件,可以直接调用test()函数,但是因为test2()是test.c中的内部函数,所以main文件不能直接调用它,但是可以通过test()函数间接的调用它。
对全局变量的作用
全局变量分2种 外部变量: 1、定义的变量能被本文件和其他文件访问。 2、默认所有全局变量都是外部变量。 3、多文件中,所有同名的外部全局变量都是一个地址,都是同一个变量。 内部变量:用static 1、定义内部变量只能被本文件访问,不能被其他文件访问。 2、内部全局变量要加上static 3、不同文件中的同名的内部变量互不影响。
extern对变量的作用只有一个,类似于函数声明 你可以把变量定义在文件的结尾,然后在文件的开头写一个extern声明,也可以在函数中声明,不过要在使用它以前声明,否则会编译错误。 extern int a;
注意,即使你在一个文件里声明了外部变量a,在其他文件中想把a的定义放到文件最后,也要在文件开头使用extern来声明变量。
比如 1、main.c文件 #include <stdio.h> #include "test.h" //定义外部变量 int a; //定义内部变量 static int b; //声明一个变量 extern int c; int main() { a = 10; b = 22; c = 44; test();
printf("a= %d, b = %d, c = %d\n",a, b, c); return 0; } //定义外部变量 int c;
2、test.h文件省略 3、test.c文件 #include <stdio.h>
//定义外部变量 int a; //定义内部变量 static int b; //声明一个变量 extern int c;
extern void test() { printf("a= %d,b = %d, c = %d\n",a, b, c); a = 20; c = 66;
} //定义外部变量 int c;
输出结果为: a = 10,b =0, c = 44 a = 20, b =22, c = 66
static对局部变量的影响: 1、默认情况下函数内部的局部变量在函数调用完就会销毁。 2、如果给局部变量一个static ,那么会延长他的生命周期。知道程序结束。 如果有个函数调用频率特别高,并且有个变量是不变的,这里我们最好把它设定为static。免去了每次都要分配内存和销毁的步骤。。 |