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

2017-08-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的定义,又引用了第一个定义,相当于替换了两次

上一篇 下一篇

猜你喜欢

热点阅读