- 前言
很多人搞不懂这种问题,打算整理一篇文章当自己忘记的时候,也可以翻来看看
- 目录
1. extern const static define 用法
2. 深层次理解 extern const static define
一 . extern const static 用法
const 一般用来定义一个常量
// 不可以被修改
NSString* const text = @"Text";
// 可以被修改
NSString const *text = @"Text";
- extern
外部变量,引用其他类的全局变量
.m 文件中
NSString* const scheme = @"Scheme";
.h 文件中
extern NSString* const scheme;
在其他文件中可以直接访问。
或者采用下面这种写法:
在一个文件中
NSString * const str = @"123";
在另外一个文件中引用的时候:
extern NSString* str;
- static 修饰的变量是一个私有的全局变量
作用: 延长局部变量的生命周期,程序结束时才会销毁
例如: 在一个文件中声明:
static NSString* const scheme = @"Scheme";
在另外一个文件中声明 :
extern NSString* scheme;
编译阶段不会报错,但是在运行期,会报如下错误:
- define
是一条预编译指令,编译器在编译阶段会将所有使用到的地方简单的进行替换
用法:
#define SCHEME 100
二 . 深层次理解 extern const static define
const 和 define
相同点:
const 和 define 都能定义一个常量,都能实现修改值修改一次,
所有用上该变量的值都能做到同步的修改,
这样代码就变得易于维护,提高代码的效率。
不同点:
const 给出的是对应内存的地址,所以const定义的常量在程序运行过程中只有一份拷贝
而 #define 定义的常量在内存中有若干个拷贝
宏能做到 const 做不到的事情:
1. 宏能定义函数
2. 宏能根据传入的参数生成字符串
#define string(str1,str2) #str1#str2