1)static,extern修饰全局变量
static修饰的全局变量只能在当前文件中使用
全局变量和静态全局变量生命周期一样,都存储在静态存储区,在整个工程执行期间一直存在。作用域不同,全局静态变量作用域只在当前文件,非静态全局变量作用于是整个源程序。
static修饰的好处:1、不会被其他文件所访问,修改;2、其他文件可以使用相同名 字的变量,不会发生冲突。
2)static修饰的局部变量:存储区由栈变为静态存储区,生命周期变长,代码只执行一次。extern不能修饰局部变量
3)static修饰函数:函数的定义默认是extern,静态函数只能在声明他的文件中可见,
好处:其他文件可以定义相同名字的函数,静态函数不能被其他文件所用
4)苹果不建议我们将字符串常量抽象成宏,推荐我们使用const常量。
const和宏的区别:宏是预编译,const是编译阶段。宏不做编译检查,只是替换。但是宏能替换一些函数,方法。使用大量宏容易造成编译时间久,每次都要重新替换。被const修饰的变量是只读的。
使用场景:static和const的联合使用声明一个只读的静态变量,在一个文件中经常使用字符串常量,可以代替宏定义,在多个文件中使用extern和const
修饰函数的不可变参数
(5)extern
作用:只是用来获取全局变量的值,(包括静态变量)不能用于定义变量,在多个文件中使用extern和const来代替宏定义
工作原理:现在当前文件中查找有没有全局变量,没有找到才会去其他文件中查找
单利使用static修饰,1、隔绝外部的修改 2、只初始化一次 3、定义单例需要写类方法,只有静态变量才能在类方法中使用