页眉应包含一次
Header should be included once
本文关键字:包含一 更新时间:2023-10-16
在头文件中,我看到了定义宏的两种主要方法,以避免多次包含该文件。
1.
#ifndef SOME_CLASS
#define SOME_CLASS
//code ...
#endif
2.
#ifndef SOME_CLASS
//code...
#define SOME_CLASS
#endif
哪个更可取,为什么?
我更喜欢第一种方法,因为在ifndef之后发生什么并不重要,因为它将在之后直接定义。
编译器通常会对第一个选项进行优化,使其表现得像非标准的#pragma once
。
在递归包含的情况下,它也更安全。如果在//code...
部分中包含另一个包含…的标头。。。。其中包括您当前正在编辑的标题,那么第二个版本将不起作用。
我会选择第一个。
原因:如果您想更改保护名称(例如,SOME_CLASS
到SOMECLASS
),您不必一直向下滚动到文件末尾也可以更改它。
最好的选择是使用#pragma once
。使用#define
时,使用多个库时必须非常小心,因为保护名称可能不是唯一的。
我更喜欢第一个选项。假设您包含更多的文件,而这些文件又包含包含#ifndef SOME_CLASS
的文件。
我认为,如果#define SOME_CLASS
与#ifndef SOME_CLASS
不相邻,那么很容易发现包含错误。
// SomeClass.h
#ifndef SOME_CLASS
#include "OtherFile.h" // will eventually lead to #include "SomeClass.h"
#define SOME_CLASS
... boat load of code here...
#endif // SOME_CLASS
相关文章:
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 当我在结构中包含多个数组时,我的程序会跳过一堆代码
- 一次包含一个 #include 表达式的多个头文件?
- 使用 #pragma 一次,#ifndef 在同一文件中包含保护
- 返回一个数组,该数组包含数组中的数量,该数组数量较小或等于给定数组中的元素
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- C++ - 在类中包含不是类对象属性的变量是否是一种不好的做法
- 至少包含一次字符 X 的 S 的不同子字符串的数量
- 寻找一种在运行时检测 valgrind/memcheck 的方法,而无需包含 valgrind 标头
- 如何查找一组类型对是否包含一个元素作为第二个成员
- 制作一个包含 2 个 .cpps 和一个头文件的生成文件
- C++包含一组对象的类
- 我想在C++项目中包含一种脚本语言.Lua vs Bison/Yacc
- 为什么我可以在多个包含const int的cpp文件中包含一个头文件,而不会出现编译器错误
- 有没有办法将源代码格式化为每行只包含一条语句
- 双链接列表总是只包含一条记录
- 页眉应包含一次
- 头文件在整个程序中仅包含一次