预处理

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的作用域到此结束
.....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值