宏和条件编译的结合使用

2017-01-03  本文已影响14人  火星救援

宏定义  有参数  无参数

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,因为这是运用了条件编译的第二种情况,判断一个宏有定义。

上一篇下一篇

猜你喜欢

热点阅读