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