高质量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) 头文件能加强类型安全检查
        如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章