高質量C++編程(一)防止頭文件重複引用

【規則1-2-1】爲了防止頭文件被重複引用,應當用ifndef/define/endif結構產生預處理塊。
 
一、爲什麼會出現頭文件被重複引用的問題
     在一個CPP文件中,可以包含多個頭文件,而頭文件間又是可以相互引用的,這就導致一個CPP文件中可能間接多次包含某個頭文件,如果頭文件中 沒有防止 多次編譯的語句,就會出現頭文件被重複定義的編譯錯誤
二、怎麼防止 頭文件被重複引用
      1、使用 ifndef/define/endif 結構產生預處理塊
            適用條件:在任意編譯環境都可以使用
      2、使用 #pragma once
            適用條件:在微軟的開發工具上的使用
三、命名規則
       一般是頭文件名全大寫,前後加下劃線,並把文件名中的“.”也變成下劃線
四、舉例
#ifndef方式
[html] view plain copy
  1. /********************************************************************  
  2.     created:        2013/06/16   23:01  
  3.     Filename:       Test.h  
  4.     author:         Neo  
  5. *********************************************************************/  
  6. #ifndef _TEST_H__  
  7. #define _TEST_H__  
  8.   
  9. class Test  
  10. {  
  11. public:  
  12.     Test();  
  13.     ~Test();  
  14.   
  15.   
  16. private:  
  17.     int     m_nCount;  
  18.   
  19. };  
  20. #endif  


#pragma once方式
[html] view plain copy
  1. /********************************************************************  
  2.     created:        2013/06/16   23:01  
  3.     Filename:       Test.h  
  4.     author:         Neo  
  5. *********************************************************************/  
  6. #pragma   
  7.   
  8. class Test  
  9. {  
  10. public:  
  11.     Test();  
  12.     ~Test();  
  13.   
  14.   
  15. private:  
  16.     int     m_nCount;  
  17.   
  18. };  


五、執行過程
        頭文件_TEST_H第一次執行時,還沒有被define,則滿足#ifndef_TEST_H的條件,
執行它下面的內容 #define_TEST_H 和 Test類的聲明;
之後再編譯到該頭文件時,由於已經定義了_TEST_H了,所以語句#ifndef_TEST_H 不執行,
而執行#endif的語句,這裏沒有語句,就直接結束了
因此,在某一個cpp文件中,多次包含了#include<Test.h>時,就不會出現頭文件被重複定義的編譯錯誤了
 
注:
1、Test.h文件的組成:
  (1)頭文件開頭處的版權和版本聲明。
  (2)預處理塊。
  (3)函數和類結構聲明等。
2、Test.cpp文件的組成:
  (1)定義文件開頭處的版權和版本聲明。
  (2)對一些頭文件的引用。
  (3)程序的實現體(包括數據和代碼)
3、頭文件的作用:
   (1) 通過頭文件來調用庫功能
        在很多場合,源代碼不便(或不準)向用戶公佈,只要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調用庫功能,而不必關心接口怎麼實現的。編譯器會從庫中提取相應的代碼。
   (2) 頭文件能加強類型安全檢查
        如果某個接口被實現或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程序員調試、改錯的負擔。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章