一、statc和extern对函数的作用
1、函数是分类型的,外部函数和内部函数。定义的函数能被外部文件和本文件所访问的函数为外部函数。只能被本文件访问的函数为内部函数。默认情况下所有函数都是外部函数。整个程序中不允许有同名的外部函数。
- //如下两行代码时有区别的
- //声明了一个静态函数
- static int hello;
-
- //extern默认省略
- int hello;
-
- //默认请款下所有函数都是外部函数,但完整声明一个外部函数需要加extern关键字,extern 可以省略。
- extern int hello()
- {
- ……;
- }
-
- //声明一个内部函数,这个函数只能在函数内部访问。
- static int hello()
- {
- ……;
- }
-
二、static和extern对全局变量的作用
1、全局变量分两种,内部变量和外部变量。能被本文件和其他文件访问的是外部变量。只能被本文件访问的变量是内部变量,从定义的那一个行开始。默认情况下所有变量都是外部变量,整个程序都能访问,不同文件的同名外部变量都代表同一个变量。
2、需要注意的是,extern关键字对全局变量的作用只是声明,而不是定义,默认就是外部变量加上extern反而不是定义一个变量。如果想要定义一个内部变量则需要明确加上static。
- //全局变量分两种,内部变量,外部变量
- //声明了一个外部变量
- int hello;
-
- //此处的extern是声明一个外部变量,为后面的hello变量声明。这个声明同样可以放在方法内部。
- //extern对全局变量的作用不代表定义,而是声明。定义是需要开辟内存空间的。
- //声明是告诉程序我后面有定这个变量,只不过我提前拿来用。
- extern int hello;
-
- int main()
- {
- //这个是外外面的全局变量进行一个声明,声明以备可以在明确定义变量之前可以使用它。
- extern int hello;
-
- //这是重新定义一个局部变量
- int fuck;
- }
-
- 定义一个全局变量,而且是外部全局变量。
- int hello;
三、static对局部变量的作用
1、static改变了局部变量声明周期,整个程序运行期间都在,但并没有改变它的作用域。使用场景,调用这个变量特别频繁,并且值不需要修改。
- void test()
- {
- int a = 0;
- a++;
- //每次打印都是同一个值,因为函数一调用完,局部变量就注销,下次调用再重新分配内存空间。
- printf(“%d\n”, a);
-
- static int b = 0;//加上两一个static关键字
- b++;
- //这个变量的声明周期很长,再整个程序执行期间都会存在,在第一次调用时
- printf(“%d\n”, b);
- }
- void main()
- {
- test();
- test();
- }
-