本章主要讲述OC的预处理功能。
1. #define
1)#define TRUE 1
#define PI 3.142592654
后面最好不要有;号。因为它会把;号也加到TRUE里。
2)#define没有local一说。都是定义在最外面。
3)预定义符号:M_PI
4)#define的好处。 定义常量,如果需要修改的时候只需修改一处即可。
5)可以包含表达式
#define TWO_PI 2.0 * 3.141592654
6)#define AND && //还可以定义替换操作符
7)还可以使用前面定义好的define.
#define PI 3.141592654
#define TWO_PI 2.0 * PI
PI 放在后面也可以。
8)还可以这样玩
#defin IS_LEAP_YEAR year % 4 == 0 && year % 100 != 0 \
|| year % 400 == 0
if(IS_LEAP_YEAR) ...
判断是否是闰年。
或者加参数
#defin IS_LEAP_YEAR(y) y % 4 == 0 && y % 100 != 0 \
|| y % 400 == 0
9)定义经常叫 macros
#define SQUARE(x) x * x
y = SQUARE(V) 执行没有问题
y = SQUARE(V + 1)执行有问题, 它会这样执行 y = v + 1 * v + 1
需要改成
#define SQUARE(x) ( (x) * (x) )
10)还可以玩这样
#define MakeFract(x, y) ([Fraction alloc] initWith: x over: y])
myFract = MakeFract(1, 3)
2 #import
通常用来导入头文件
1)也可以定义一个头文件。把需要用到的所有#define都放进去。
但是#import必须放在所有#define之前。
2)#define <Foundation/Foundation.h>尖括号用来导入系统头文件。
3)@import 被看做modules。 导入迅速而且避免命名冲突。
3. conditional compilation 条件编译
1)使用#ifdef #endif #else, #ifndef
#ifdef IPAD
# define kImageFile @"barnHD.png"
#else
# define kImageFile @"barn.png"
#endif
2)还可以用它来标示log为了调试用。
#ifdef DEBUG
NSLog(@"User name = %@, id = %i, userName, userId);
#endif
3)更为简单的#if #elif
4. #undef
取消定义