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()总是会被调用

小结

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

posted on 2014-07-22 17:58  格物志  阅读(1779)  评论(0编辑  收藏  举报

导航