static和extern
1.这是我们C语言中的两个关键字.是用来修饰变量和函数
1),static和extern修饰局部变量的效果
2)。static和extern修饰全局变量的效果
3),static和extern修饰函数的效果
2,static修饰局部变量
1),如果局部变量被static修饰,这个变量就叫做静态变量
2),静态变量不再存储在栈区域,而是存储在常量区。
3)当函数执行完毕之后.这个静态变量不会被回收。下次再执行这个函数的时候。第1次执行这个函数的时候,就会将这个静态变量声明在常量区,函数执行完毕之后,这个静态变量不会被回收
后面再去执行这个函数的时候,声明静态变量的这句话,就不会再执行了,而是直接略过,直接使用这个静态变量的值.
4)static修饰的静态变量,函数结束不会被回收,仍然存在,函数无论执行多少次。这个静态变量只有1份。
3.extern不能修饰局部变量。
4.全局变量,
1),写1个函数,最完整的步骤应该分两步,
-> 先写函数的声明
->再写函数的实现
2),我们写1个全局变量.
最完整的步骤也应该分为两步--> 先写全局变量的声明.
只定义全局变量.而不赋值,这个就叫做全局变量的声明.int num
再写全局变量的定义。int num = 10;
定义全局变量并初始化。也叫做全局变量的实现
这个时候,全局变量的声明可以放在使用这个全局变量的前面,全局变量的定义可以放在使用全局变量的后面这个时候,仍然可以正常取值。
3),全局变量如果只有声明.没有定义,那么这个时候编译器会自动的帮助我们去实现这个全局变量自动实现的时候,会将这个全局变量自动初始化为0
4),全局变量也可以只有定义,而没有声明,但是这个时候,这个全局变量的定义必须要在使用全局变量的函数的前面
5.当我们分模块开发的时候.如果要在模块中声明全局变量
1),全局变量的声明要写在.h文件中,
2).全局变量的实现要写在.c文件中
3),如果将全局变量定义在模块中,这个全局变量就必须要使用static或者extern修饰
如果定义在模块中的全局变量,使用extern修饰。这个模块中的全局变量就可以跨模块访问,如果定义在模块中的全局变量,使用static修饰。这个模块中的全局变量就只能在当前模块中访问,虽然,不报错,但是并没有取到真正的值.
6,static和extern修饰函数
1),如果函数被extern修饰,那么这个函数可以跨模块调用
2),如果函数被static修饰,那么这个函数只能在当前模块中调用,无法跨模块调用
如果函数没有写static或者extern 那么这个函数默认就是extern