导航

编写自己的头文件

Posted on 2021-01-29 18:25  抑或  阅读(259)  评论(0编辑  收藏  举报

为了确保各个文件中类的定义一致,类通常被定义在头文件中,而且类所在头文件的名字应与类的名字一样。例如,库类型 string 在名为string 的头文件中定义。

头文件通常包含那些只能被定义一次的实体,如类、const 和constexpr变量等。头文件中也经常用到其他头文件的功能。

头文件一旦改变,相关的源文件必须重新编译以获取更新过的声明。

预处理概述

确保头文件多次包含仍能安全工作的常用技术是预处理器(preprocessor),它由C++从C语言继承而来。预处理器是在编译之前执行的一段程序,可以部分地改变我们所写的程序。之前已经用到了一项预处理功能#include,当预处理器看到#include标记时就会用指定的头文件的内容替代#include。

C++程序还会用到的一项预处理功能是头文件保护符(header guard),头文件保护符依赖于预处理变量。预处理变量有两种状态:已定义和未定义。#define 指令把一个名字设定为预处理变量,另外两个指令则分别检查某个指定的预处理变量是否已经定义:#ifdfef 当且仅当变量已定义时为真,#ifndef当且仅当变量为定义时为真。一旦检查结果为真,则执行后续操作直至遇到#endif 指令为止。

使用这些功能就能有效的防止重复包含的发生:

 

 预处理变量无视C++语言中关于作用域的规则。

整个程序中的预处理变量包括头文件保护符必须唯一,通常的做法是基于头文件中类的名字来构建保护符的名字,以确保其唯一性。为了避免与程序中的其他实体发生名字冲突,一般把预处理变量的名字全部大写。

1