标头保护中的 MYHEADER_HPP 如何与实际文件名“MyHeader.hpp”相关

Posted

技术标签:

【中文标题】标头保护中的 MYHEADER_HPP 如何与实际文件名“MyHeader.hpp”相关【英文标题】:How does MYHEADER_HPP in a header guard relate to the actual file name "MyHeader.hpp" 【发布时间】:2020-03-31 16:39:22 【问题描述】:

我正在尝试自学 C++,但一个我不明白的小细节一直困扰着我。我了解对标头保护的需求,但我不了解确切的语法。例如。如果我有一个名为 MyHeader.hpp 的头文件并且我想在没有保护的情况下包含它,我会写

#include "MyHeader.hpp"

但是,我看过的所有教程似乎都表明使用警卫执行此操作的方法类似于

#ifndef MYHEADER_HPP
#define MYHEADER_HPP

我的问题是#ifndef/#define 中的 MYHEADER_HPP 如何等同于原始包含语句中的实际文件名“MyHeader.hpp”?

谢谢

【问题讨论】:

没有关系。它只需要在您导入的所有标题中都是唯一的 您可以将其命名为#ifndef ABC123 等,只要名称是唯一的。 【参考方案1】:

你可以使用任何东西作为你的定义,它会给出相同的结果。需要注意的是,如果您在两个不同的文件中使用相同的名称,如果您尝试将两者都包含在同一个翻译单元中,则会出现问题。

避免这种情况的一个非常简单的方法是使用与文件名匹配的标头保护。

【讨论】:

好的,现在我明白了。我的愚蠢错误是没有注意到教程中头文件本身底部的#endif。感谢大家的快速回复。

以上是关于标头保护中的 MYHEADER_HPP 如何与实际文件名“MyHeader.hpp”相关的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vuejs 和 Node 中设置授权标头并保护路由

在使用 Spring Security 3.2.0 保护应用程序并提供 javascript 文件时,如何设置内容类型标头?

ASP.Net Core 2.0 如何获取中间件中的所有请求标头? [复制]

与响应标头相比,请求标头中的 Cache-Control 效果如何

如何使用 SSIS 将 File1 标头中的单个值与 File2 中的总行数进行比较(csv)

如何保护 Angular 2 SPA 免受 XSS 攻击?