美文网首页
宏和条件编译的结合使用

宏和条件编译的结合使用

作者: 火星救援 | 来源:发表于2017-01-03 14:29 被阅读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,因为这是运用了条件编译的第二种情况,判断一个宏有定义。

    相关文章

      网友评论

          本文标题:宏和条件编译的结合使用

          本文链接:https://www.haomeiwen.com/subject/dgtnvttx.html