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

最常见的就是

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,173评论 19 139
  • 宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可...
    你好自己阅读 1,145评论 0 5
  • http://www.open-open.com/lib/view/open1390651437117.html ...
    Xtuphe阅读 1,396评论 0 10
  • iOS宏的经典用法Apple的习惯attribute iOS宏的经典用法1.常量宏、表达式宏 define kTa...
    reallychao阅读 4,076评论 0 0
  • Lancy's Blog Blog Archives About MeTwitterWeiboGitHubRSS ...
    其实也没有阅读 5,699评论 0 24

友情链接更多精彩内容