Objective-C第六版第12章----Preprocessor

来源:互联网 发布:禁用的网络怎么恢复 编辑:程序博客网 时间:2024/06/14 16:28

本章主要讲述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

取消定义



0 0