google-glog 開源庫分析(四):glog宏技巧

來源:互聯網
上載者:User

標籤:使用   問題   re   c   代碼   new   

在核心結構之外,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()總是會被調用
小結

以上只是我參考了網上資料及閱讀原始碼時的總結,還沒在實際項目中應用。
通過閱讀原始碼,也是一種享受。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.