目录:
(1)分类
(2)特点
(3)宏定义的基本操作
(4)宏的高级用法:(带参数的用法)
(5)条件编译指令
一、分类:
(1)文件包含指令:#include
(2) 宏定义
(3)条件编译指令
二、特点:
(1)都是以#开头
(2)预处理指令都是在编译之前执行
(3)预处理指令后面都没有分号
三、宏定义的基本操作
1、 预处理命令,在编译之前运行
2、 作用:可以为一段代码定义1个标识,如果要使用这个代码,直接使用标识就可以
3 、 语法: #define 宏名 值
#define 宏名 值 #define name @"张三"
4、 原理:在预编译的时候,就会执行源文件中的预处理命令
会将代码中使用宏名的地方替换为宏值
5、需要注意的地方:
(1)宏值可以是任意的东西,定义的时候并不会检查语法;
(2)如果宏值是一个表达式,那么宏值并不是这个表达式的结果,而是这个表达式本身;
#define num (1+10+90)
(3)如果宏值当中包含变量名,在使用之前必须保证这个变量已经存在
#define Q a+a
(4)宏的作用域:
可以定义在函数的内部,也可以定义在函数的外面
从定义宏的地方,后面的所有的地方,都可以直接使用;
(5)#undef 宏名
可以让指定的宏提前消失
(6)双引号中的内容不会认为是宏名;
(7)宏的层层替换,可以使用
#define h 3 #define w 3.14 #define S h*w
(8)宏值后面可以添加分号,但是添加的分号作为宏值一起给宏名;
(9) 可以定义任意代码段为宏
#define和 typedef的区别:
1). #define是一个预处理指令,在预编译的时候执行,在预编译的时候把宏名替换成宏值;
typedef是C语言代码, 在代码云行的时候才会执行,
2)#define 可以将任意的代码取1个标识符
typedef只能为数据类型取名字
四、宏的高级用法:(带参数的用法)
1.使用有参数的宏,就必须在使用的时候传值
#define N(a) a+a+a //使用 N(1)
#define sum(a,b) a+b //使用 sum(1, 2)
注意: 使用:宏不是函数,宏的参数不需要加类型
如果换行,宏就结束了
五、 条件编译指令
1、 (1) 预处理指令,预编译阶段执行
(2)可以让编译器只编译部分指令
2、使用:
条件编译的条件只能是宏,不能是函数变量
(1)、#ifndef
#endif #ifndef DEBUG //如果没有定义DEBUG这个宏就执行下面的第d%行 #define NSLog(...) NSLog(@"%s 第%d行 %@ ",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__]) #else //否则的话就执行NSLog #define NSLog(...) #endif
(2)、#ifdef
#ifdef DEBUG //如果定义DEBUG这个宏就执行下面的第d%行 #define NSLog(...) NSLog(@"%s 第%d行 %@ ",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__]) #else //否则的话就执行NSLog #define NSLog(...) #endif
(3)、#if else
#if debug==0 #define BASEURL @"测试" #else #define BASEURL @"正式" #endif