header 守卫中的 MYHEADER_HPP 与实际文件名 "MyHeader.hpp" 有何关系

How does MYHEADER_HPP in a header guard relate to the actual file name "MyHeader.hpp"

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

#include "MyHeader.hpp"

但是,我看过的所有教程似乎都指出了使用守卫执行此操作的方法类似于

#ifndef MYHEADER_HPP
#define MYHEADER_HPP

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

谢谢

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

避免这种情况的一个非常简单的方法是使用 header 与文件名匹配的守卫。