我们一般把一些常用的变量在pch文件中单独写一个宏,比如移动设备的屏宽,屏高,还有一些URL的前缀什么的。今天在这里和大家讨论的是定义一些常量,比如定义一条有多少秒:#define SECONDS_PER_DAY (60*60*24);与const (60*60*24)之间的区别。
这些用define定义宏的指令,在程序预处理阶段只是用定义的内容进行替换,因此在程序运行的时候,常量表中是没有这个用#define所定义的宏的,系统也并不会为它分配内存空间,而且在编译时也不会检测它的数据类型是否匹配,只有在运行时才会进行检测,出错的概率相对大一点;
而const定义的常量,在程序运行的时候是存放在长量表里面的,系统会为它分配内存,而且在编译时就会进行类型检测。出错概率相对较小。
还有一点,#define定义的宏要注意“边缘效应”,例如:
#define N 2 + 3 // 我们预想的N值为5;
int a = N / 2; // 这里使用的时候我们预想a的值为2.5,可实际上a的值为3.5。
因为在编译的时候就进行了替换 变成了 int a = 2 + 3 / 2 。(所以一般定义常量宏需要用()括起来)