宏和条件编译的结合使用
宏
宏定义 有参数 无参数
1.无参数的宏
语法:
#define 宏名 宏值
#define MM 10 //这里是定义了一个宏,宏名叫做MM,宏值是10
int num = MM; //这里使用了一个宏
执行的原理: 就是在编译之前,把使用宏的地方,用宏值替换宏名。
宏也是有作用域的:
宏的作用域是从定义宏的那一行代码开始,一直到后面每一行都是他的作用域,没有函数的概念。
#undef 终结宏
如果你使用了一个undef来终结一个宏,那么这个宏的作用域 就是这个宏定义的那一行 到 终结的这一行中间。
例子:
#define PP 4;
#define PI 3.14
#define R 5
#define MianJi PI*R*R // 求面积
2. 有参数的宏
语法:
#define 宏名(参数的标示符) 宏值
#define N(a) a+10 //这里定义了一个带参数的宏N, 参数是a 宏值是a+10
int num = N(70); //这里调用宏, 先把70传递给a ,那么宏值就变成了70+10 ,, 宏替换 就把70+10 替换 N(70);
2.如果宏值 有一部分或者全部 是调用宏的人 决定的,那么就要使用有参数的宏。
3.宏参数可以有多个,多个参数之间用逗号隔开。#define sum(a,b) a+b
例子:
#define N(a) a+10
#define M(a) 70;
#define Log(a) printf(a) //printf()
#define sum(a,b) a+b //ab num1 num2 //num1+num2
2,条件编译
条件编译有2种
1.条件编译的第一种
2.条件编译的第二种
3.两者结合使用的场景,也就是常用的Debug
#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#define DLog(...)
#endif
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
DLog,在Debug模式下会输出信息,包括方法名,行数以及你想要输出的内容。ALog无论在Debug还是在Release模式下都会输出。
值得注意的是:DEBUG的值要在setting里面设置为1,因为这是运用了条件编译的第二种情况,判断一个宏有定义。