概要
- static:静态、局部。
- extern:外部
- const:常量
static
表示一个变量只在定义此变量的编译单元(如每个类的实现文件或者每个函数内),生命周期与代码的生命周期一样,如一个app结束运行,static定义的变量才会结束。
const
常量
如NSString *const timeRun = @“VALUE”;
表示timeRun
指针不变
extern
extern NSString *const timeRun;
若编译器看到头文件中extern
关键字,就能明白如何在引入此头文件的代码中处理该常量了。这个关键字告诉编译器,在全局符号表中会有一个名叫timeRun
的符号。也就是说,编译器无须查看其定义,即允许代码使用此常量。因为它知道,当链接成二进制文件后,肯定能找到这个常量。
注意:如果在多个文件中同时出现extern
定义的同名的变量,编译器会报错duplicate symbol XXX in:
static const与#define区别
定义常量时,尽量使用static const
代替#define
,因为:
- 使用#define时,预处理指令定义常量不含类型信息,编译器只是会在编译前据此执行查找和替换操作。
- 使用#define时,即使有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一样。