首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

摘要

为头(文件)添加保护:在所有头文件中使用带有惟一名称的包含保护符(#include guard)防止无意的多次包含。

讨论

应该用内部包含保护符保护每个头文件,以避免在多次包含时重新定义。例如,头文件foo.h应该采用下面的一般形式:

#ifndef FOO_H_INCLUDED_

#define FOO_H_INCLUDED_

// ……文件内容……

#endif

定义包含保护符时,应该遵守如下规则:

l     保护符使用惟一名称:确保名称至少在你的应用程序中是惟一的。上面的代码中采用了流行的命名规范,保护符名称可以包含应用程序名称,还有一些工具,能够生成包含随机数的保护符名称。

l     不要自作聪明:不要在受保护部分的前后放置代码或者注释,要谨遵上面的标准形式。虽然如今的预处理器能够检测出包含保护符,但是它们的智商有限,只认识正好位于头文件开始和结束处的保护代码。

避免使用一些比较老的书中所提倡的已经过时了的外部包含保护符:

#ifndef FOO_H_INCLUDED_         // 推荐

#include "foo.h"

#define FOO_H_INCLUDED_

#endif

外部包含保护符非常令人厌烦,对于当今的编译器来说已经过时了,而且因为耦合太紧密(调用者和头文件必须就保护符名称达成一致),很容易出错。

例外情况

在一些非常罕见的情况下,可能需要多次包含一个头文件。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论