我有一个简单的头文件,我在其中前向声明命名空间中的所有类,例如。
#ifndef TEST_FWD_HPP
#define TEST_FWD_HPP
namespace a {
namespace b {
class A;
class B;
}
}
#endif
是否应该防止该文件出现多个包含(#ifndef
...)?这仅对前向声明有意义吗?
我有一个简单的头文件,我在其中前向声明命名空间中的所有类,例如。
#ifndef TEST_FWD_HPP
#define TEST_FWD_HPP
namespace a {
namespace b {
class A;
class B;
}
}
#endif
是否应该防止该文件出现多个包含(#ifndef
...)?这仅对前向声明有意义吗?
像这样保护头文件通常是一种好习惯。在大多数情况下,文件只包含一次是没有必要的,但是当项目变得复杂时,头文件包含在其他头文件中,它可以帮助您保持理智。
如果你只有前向定义和函数原型,那么通常是没有必要的,但随着时间的推移,头文件往往会增加东西,这通常是理所当然的事情。
多个包含保护不仅服务于多个声明错误。您需要在每个头文件中插入这些保护,以避免无限包含循环。
只需使用(正式非标准)#pragma once
并完成它。
除了防止同一翻译单元中的多个包含之外,标头保护或#pragma once
让精明的编译器避免重新扫描文件。