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

相關文章
相關標籤/搜索