美文网首页
宏定义&宏函数(日志输出)define

宏定义&宏函数(日志输出)define

作者: 贝克街的猫大哥呀 | 来源:发表于2017-08-25 00:25 被阅读0次

    最常见的就是

    #indef __cplusplus

    这表示支持C++语法

    再如可以定义常量

    #define MAX 100 

    这跟JAVA全局变量有什么区别呢?

    JAVA的变量是有类型的,这没有类型,这只是替换而以!

    还有就是宏函数,就是就是当函数名太长时,可以简写而以!

    void cat_read(){

       printf("%s\n","input something");

    }

    #define jni(NAME) cat_##NAME();

    void main(){

       jni(read);

       system("pause");

    }

    上面就是将cat_read这个方法函数,变成了 jni(read)来调用!很简单哇-

    举个日志输出的例子

    #define LOG(FORMAT,...) printf(##FORMAT,__VA_ARGS__);

    void main(){

       LOG("%s","123");

       system("pause");

    }

    定义了一个LOG函数,其实...表示不确定后面有几个参数,也许1个,也许多个,与后面的__VA_ARGS__对应,这表示可变参数,这是固定写法

    第一个参数 FORMAT,并不是固定写法,可以替换成任意字符串,比如NAME

    再比如,日志会有级别,比如I级,这里可以这样写

    #define LOG_I(FORMAT,...) printf("INFO:");printf(##FORMAT,__VA_ARGS__);

    void main(){

       LOG_I("%s", "123");

       system("pause");

    }

    最终就会输出:INFO:123

    说穿了就是替换。在程序的预编译期完成替换工作。

    再来个升级的LOG写法

    #define LOG(LEVEL,FORMAT,...) printf(##LEVEL); printf(##FORMAT,__VA_ARGS__);

    #define LOG_I(FORMAT,...) LOG("INFO:",##FORMAT,__VA_ARGS__);

    void main(){

       LOG_I("%s", "123");

    system("pause");

    }

    相当于第二个LOG_I的定义,又引用了第一个定义,相当于替换了两次

    相关文章

      网友评论

          本文标题:宏定义&宏函数(日志输出)define

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