一、const与宏定义的区别
- 宏定义是在预编译时处理,const是在编译阶段处理;
- 宏定义不做检查,不会报编译错误,只是替换,const会进行编译检查;
- 宏可以定义一些函数、方法,const不可以;
- 宏定义每次编译都要重新替换,所以大量的宏会导致编译时间变长;
二、const
- const只修饰右边的变量,基本数据变量p,指针变量*p;
- 被const修饰的变量是只读的,不可更改值;
//两种写法是一样的,都是只修饰右边变量m
const int m = 20;
int const m = 10;
m = 30;//会报错,const修饰后不允许修改值
int a = 10;
int const *p = &a;
const int *p = &a;
三、static
修饰局部变量:
- 延长局部变量的生命周期,程序结束才会被销毁;
- 局部变量只会生成一份内存,只会初始化一次;
- 改变局部变量的作用域;
修饰全局变量:
- 只在本文件内访问全局变量,修改全局变量的作用域,不改变生命周期;
- 避免重定义全局变量;
四、static和const联用
用来声明一个静态只读常量,一般就是静态全局只读常量;
//声明一个静态全局只读常量,name的值不可变,宏的替代品
static NSString *const name = @"小明";
//声明的是*word只读
static NSString const *word = @"hello";
//所以可以修改word的值
word = @"world";
五、extern与const联用
extern只能用来获取全局变量的值,不能修饰变量;
extern工作时,现在本文件内查找变量的值,如果没有找到,会去其他文件查找;
如果有多个文件都需要使用的变量,可以使用extern和const联用;
.h文件中
//定义了可在多个文件中共同使用的全局静态常量
extern NSString *const country;
extern NSString *const home;
.m文件中
NSString *const country = @"China";
NSString *const home = @"HeNan";