我经常在头文件的开头看到这样的代码:

#ifndef HEADERFILE_H
#define HEADERFILE_H

文件的末尾是

#endif

这样做的目的是什么?

推荐答案

这些被称为#include guards.

包含标头后,它会判断是否定义了唯一值(在本例中为HEADERFILE_H).然后,如果没有定义,它将定义它并继续到页面的其余部分.

当再次包含代码时,前ifndef个失败,导致一个空白文件.

这可以防止任何标识符(如类型、枚举和静电变量)的重复声明.

C++相关问答推荐

传递给空闲的无效地址0x71 db7 cb5e0:未分配值

try 使用sigqueue函数将指向 struct 体的指针数据传递到信号处理程序,使用siginfo_t struct 体从一个进程传递到另一个进程

我应该如何解决我自己为iOS编译的xmlsec1库的问题?转换Ctx.first在xmlSecTransformCtxPrepare()之后为空

使用GOTO从多个嵌套循环C继续

为什么我一直收到分段错误?

为什么net/if.h在ifaddrs.h之前?

可以将C变量限制为特定的读/写速度吗?

_泛型控制表达式涉及数组碰撞警告的L值转换错误?

`#if`条件中是否允许`sizeof`?

为什么我的Hello World EFI程序构建不正确?

这个计算C中阶乘的函数正确吗?

RawMotion的XInput2错误(具有较高值的XISelectEvents上的BadValue)

如何在VS 2022中正确安装额外的C头文件

从BIOS(8086)中读取刻度需要多少?

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

具有正确标头的C struct 定义问题

生成一个半RNG,结果用C表示(无随机/随机)

存储和访问指向 struct 的指针数组

将size_t分配给off_t会产生符号转换错误

为什么<到达*时不会转换为>?