防止头文件被多次包含的处理方法

1、为什么会出现多次包含同一个头文件呢?

最常见的原因是许多包含文件自身包含了其他文件,因此可能显式地包含其他文件已经包含的文件。

2、为什么这会成为问题?

因为头文件中的某些语句在一个文件中只能出现一次,比如结构类型的声明。标准C头文件使用#ifndef技术来避免多次包含。示例如下:

注:这里注意到缩排问题。旧的实现可能不允许使用缩排格式的#define指令。现在的Gcc支持#define缩排,这样在结构上会更加清晰一些。在看.H文件时,还是会看到很多#define没有缩排的。就个人风格而言,我使用缩排格式。

3、如何保证使用的标识符在其他地方没有使用过?

通常编译器提供商采用如下方法:用文件名作为标识符,并在文件名中使用大写字母。用下划线代替文件名中的句点符号,用下划线(可能两条下划线)作前缀和后缀。

所以,为了避免跟编译器提供的头文件相冲突,采取的方法是把编译器标识符去掉前缀,也就是前缀不用下划线,其他按照编译器的方法。上面的示例就是采用的这种方法。


补充另外一种方法:

#pragma once
  这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次
  #pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义。
  #pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值