1.在编译之前对源程序进行的处理工作
#import <Foundation/Foundation.h>
2.import: 将其后的.h文件包含起来
2.1 <>:直接到系统文件夹中个找要包含的.h文件
2.2 “”:先到工程文件夹中找.h文件,如果没有再到系统文件夹中找
3 宏
3.1 无参宏,宏常量,宏指令
#define SIZE 20
3.2 带参宏
#define MIN(x,y) ((x)<(y)?(x):(y))
3.3 带参宏的使用注意事项
(1)宏函数中的参数一定要用括号括起来,以防止替换后的优先级问题
NSLog(@"%d",SQUARE(5));
NSLog(@"%d",SQUARE(2+3));
#define SQUARE(x) (x*x) (5*5)=25 (2+3*2+3)=11
#define SQUARE(x) ((x)*(x)) ((5)*(5))=25 ((2+3)*(2+3))=25
(2)宏函数的表达式也要用括号括起来,以防止替换后的优先级问题
NSLog(@"%d",SUM(2, 3)*5);
#define SUM(x,y) (x)+(y) 2+3*5=17
#define SUM(x,y) ((x)+(y)) (2+3)*5=15
(3) 宏函数中有多条语句时,应写成符合语句(大括号),以防止变量的重定义问题
#define SWAP(T,x,y) {T t=x;x=y;y=t;}
//大括号去掉,定义的t就不再是局部变量。再次用的时候会重定义而导致错误.
(4) 调用宏函数时,不能使用+ +,- -作为实参。
#define MAX(x,y) ((x)>(y)?(x):(y))
result=MAX(++a,++b); ((++a)>(++b)?(++a):(++b)) 出现多次++导致错误
3.4 可以用宏来直接创造语言来使用
#define 主函数 int main()
#define 开始 {
#define 结束 }
#define 返回 return 0;
#define 你好 NSLog(@"Hello World");
#define 循环(x) for(int i=0;i<x;i++)
#define 打印(x) printf("%d ",x);
#define 打印回车 printf("\n");
主函数
开始
你好
循环(10)
开始
打印(i)
结束
打印回车
返回
结束
3.5 宏的调用
#define ISLEAP(y) ((y)%400==0||(y)%4==0&&(y)%100!=0)
#define ISSMALL(m) ((m)==4||(m)==6||(m)==6||(m)==9||(m)==11)
#define NORMAL(m) (ISSMALL(m)?30:31)
#define DAYS(y,m) ((m)==2?28+ISLEAP(y):NORMAL(m))
4.条件编译指令
#define DEBUG1 0 或 #define DEBUG1 1
#define IA64 //定义IA64
#define IA32 //定义IA32
....
#if DEBUG1 //为真时执行
NSLog(@"i=%d,sum=%d",i,sum);
#endif
....
#ifdef IA64 //如果前面定义了IA64编译该语句
NSLog(@"系统是64位的");
#else
NSLog(@"系统是32位");
#endif
.....
#ifndef IA32 //如果不定义IA32 编译该语句
NSLog(@"系统是64位的");
#else
NSLog(@"系统是32位的");
#endif
....
#undef IA32 //删除宏,即表示IA32的作用域到此结束
.....