在C++中我们写头文件时经常需要#include来包含其他头文件。头文件定义的实体经常使用其他头文件的设施。
包含其他头文件是如此的司空见惯,甚至一个头文件被多次包含进同一源文件中也不是什么稀奇的事。例如一个头文件中用到string类型的变量,而包含这个头文件的源文件中也用到string类型的变量,这个时候string头文件就被包含了两次:一次是通过程序本身直接包含,另一次是通过包含自写头文件而间接包含。
因此,设计头文件的时候,应该使其可以多次包含在同一源文件中,这一点是很重要的。我们必须保证多次包含同一头文件不会引起该头文件的类和对象被多次定义。使得头文件安全的通用做法是使用预处理器定义的头文件保护符。头文件保护符用于避免在已经见到头文件的情况下重新处理该头文件的内容。
在编写头文件之前,我们需要引入一些额外的预处理器设施。预处理器允许我们自定义变量。
为了避免命名冲突,预处理器变量经常用全大写字母表示。预处理器变量有两种状态:一定义和未定义。定义预处理器变量和检测器状态所用的预处理器指示不同。#define指示接受一个名字并定义该名字为预处理器变量。#ifndef指示检测指定的预处理器变量是否未定义。如果预处理器变量未定义,那么跟在其后面的所有指示都被处理,直到出现#endif。为了保证头文件在给定的源文件中只处理一次,我们首先检测#ifndef。第一次处理头文件时,测试会成功,因为相应的预处理器还未定义。下一条语句就定义了该预处理器变量。那样的话,如果我们编译的文件敲好又一次包含了该头文件,#ifndef指示会发现该预处理器已经定义,并且忽略该头文件的剩余部分。
当没有两个头文件定义和使用同名的预处理器变量时,这个策略相当有效。我们可以用定义在头文件里的实体(如类)来命名预处理器变量来避免预处理器变量重名的问题。
注意:头文件应该包含有保护符,即使这些头文件不会被其他头文件包含。编写头文件保护符并不难,而且如果头文件被包含多次,它可以避免难以理解的编译错误。
相关推荐
万能头文件 万能头文件就是一个包含几乎所有的头文件,如: #include #include #include #include #include <cmath> #include <deque> #include <vector> #include <queue> #include #include <cstring> ...
官方只提供了C++头文件声明,给Delphi开发人员造成了使用上的困难。 本软件即可将C++头文件翻译成Delphi可直接使用的PAS单元文件。 用本软件打开要翻译的头文件后立即就会在头文件所在的位置生成 相同文件名的PAS...
C++信息奥赛竞赛篇——入门引导 头文件
C++头文件大全 C++头文件大全 C++头文件大全
右键快速新建C,C++和.h头文件,方便编写程序
c++头文件(c++头文件都初学者会有帮助)
memset头文件 c++版
c++常用函数所在头文件一览及功能查询,很全,很详细,对于初学者很有一定的帮助···
vs c++添加万能头文件名完整步骤说明(csdn)————程序
C、传统 C++ #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 #include <float.h> //浮点数处理 #include <fstream.h> //文件输入/输出 标准 C++ (同上...
非常全的c++函数和头文件,非常不错,适合我们随时翻阅
c++相关的头文件;c++相关的头文件;c++相关的头文件;c++相关的头文件;c++相关的头文件;c++相关的头文件c++相关的头文件;c++相关的头文件;c++相关的头文件;c++相关的头文件;
C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件C C++头文件
里面有一些常用C++函数所在的头文件,方便大家查找
oracle c++ oci 32bit头文件和lib
c++全部的头文件大集合——c++中的所有头文件在这里都有很详细全面的饿介绍和用法讲解
C++头文件大全头文件一览C++头文件大全头文件一览
sha256 GitHub源代码,头文件未被添加进去
里面含有C++数据结构头文件,在学C++的同学的可以下,有用的
C++大数库gmp头文件,大数运算分析的必备文件