google-glog 开源库分析(四):glog宏技巧

在核心结构以外,google-glog还经过宏技巧提供统一简洁的使用接口。
同时,经过命名空间的使用尽量的减小名字冲突,提供一个简介的日志库。编程

宏助手

  • 经过宏提供一个统一的简洁的日志输出接口
    • 简单的使用如LOG(INFO),LOG(ERROR)等日志输出接口
  • 经过宏提供丰富的日志输出扩展功能
    • 提供了IF,CHECK等助手宏来简化代码

编程技巧

  • 命名空间的使用
    • 由于是做为库使用,因此glog中使用了命名空间类避免名字冲突
    • 经过google命名空间提供glog库的接口空间,内部实现则进一步封装到嵌套命名空间中
  • 宏技巧:分流
    • 经过DEBUG宏可将日志输出定位到LogMessage中仍是什么也不输出的NullStream中
  • 宏技巧:隐藏
    • 日志输出核心是经过LogMessage等类实现,同时经过宏提供了丰富的接口如条件日志,CHECK日志等
  • 宏技巧:清洁
    • 在使用宏过程当中,会在使用完成后进行#undef操做来保证库的宏不会干扰到使用库的程序
  • 宏技巧:断言
    • 在mutex.h中,经过定义#define MutexLock(x) ...来保证同步锁不会出现MutexLock *lock=new MutexLock(&mu)之类错误
  • 宏技巧:技巧
    • 1.在#if条件中使用# error,there is ... 直接输出错误消息的宏可在编译期间就给出错误提示
    • 2.在宏定义中使用do{...}while(0)来保证宏内容做为一个总体,避免出现宏展开时的问题:
      • 如#define call() a();b(),在调用if(1<0) call()时扩展成if(1<0) a(); b()后b()老是会被调用

小结

以上只是我参考了网上资料及阅读源代码时的总结,还没在实际项目中应用。
经过阅读源代码,也是一种享受。google

相关文章
相关标签/搜索