高质量编程指南_第1章
2012-06-04 18:33
106 查看
【规则1-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
一、为什么会出现头文件被重复引用的问题
在一个CPP文件中,可以包含多个头文件,而头文件间又是可以相互引用的,这就导致一个CPP文件中可能间接多次包含某个头文件,如果头文件中 没有防止 多次编译的语句,就会出现头文件被重复定义的编译错误
二、怎么防止 头文件被重复引用
1、使用 ifndef/define/endif 结构产生预处理块
适用条件:在任意编译环境都可以使用
2、使用 #pragma once
适用条件:在微软的开发工具上的使用
三、命名规则
一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线
四、举例
#ifndef方式
#pragma once方式
五、执行过程
头文件_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) 头文件能加强类型安全检查
如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
一、为什么会出现头文件被重复引用的问题
在一个CPP文件中,可以包含多个头文件,而头文件间又是可以相互引用的,这就导致一个CPP文件中可能间接多次包含某个头文件,如果头文件中 没有防止 多次编译的语句,就会出现头文件被重复定义的编译错误
二、怎么防止 头文件被重复引用
1、使用 ifndef/define/endif 结构产生预处理块
适用条件:在任意编译环境都可以使用
2、使用 #pragma once
适用条件:在微软的开发工具上的使用
三、命名规则
一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线
四、举例
#ifndef方式
#ifndef _TEST_H_ #define _TEST_H_ class Test { public: Test(void); ~Test(void); private: int n; }; #endif
#pragma once方式
#pragma once class Test { public: Test(void); ~Test(void); void print(); private: int n; };
五、执行过程
头文件_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) 头文件能加强类型安全检查
如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
相关文章推荐
- 高质量C++/C编程指南 -- 第1章 文件结构
- 高质量C++/C编程指南 -- 第1章 文件结构
- C/C++怎样编写高质量的程序:头文件和源文件模板------高质量C++/C编程指南-第1章-文件结构
- 高质量C++/C编程指南 -- 第1章 文件结构
- 高质量C++/C编程指南 -- 第1章 文件结构
- 高质量C /C编程指南---第1章 文件机关
- 高质量C++/C编程指南 -- 第1章 文件结构
- 高质量C编程指南——第1章
- 高质量C /C编程指南---第1章 文件结构
- 高质量C++/C编程指南 -- 第1章 文件结构
- 高质量C++/C编程指南 -- 第1章 文件结构
- 高质量C++/C编程指南 -- 第2章 程序的版式
- 高质量C /C编程指南---参考文献
- 重读金典------高质量C编程指南(林锐)-------第三章 命名规则
- 高质量C++/C编程指南 -- 第6章 函数设计
- 高质量C++/C编程指南[1]
- 高质量C++/C编程指南 - 第8章 C++函数的高级特性
- 高质量C++/C编程指南 -- 内存管理之二
- 林锐-高质量c/c++编程指南
- 高质量c编程指南 之二