标头应只包含一次

| 在头文件中,我已经看到了两种定义宏的主要方法,以避免多次包含文件。 1。
#ifndef SOME_CLASS
#define SOME_CLASS
//code ...
#endif
2。
#ifndef SOME_CLASS
//code...
#define SOME_CLASS
#endif
哪一个更可取,为什么?     
已邀请:
我更喜欢第一种方法,因为在ifndef之后发生什么并不重要,因为它将在之后直接定义。     
编译器通常对第一个选项进行优化,使其行为类似于非标准的“ 2”。 在递归包含的情况下也更安全。如果在ѭ3部分中包含了另一个标题,而该标题包含....且其中包含您当前正在编辑的标题,则第二个版本将不起作用。     
我会去第一个。 原因:如果要更改保护名称(例如,将“ 4”更改为“ 5”),则不必一直滚动到文件末尾也可以更改它。     
最好的选择是使用
#pragma once
。对于
#define
,在使用多个库时必须非常小心,因为保护名称可能不是唯一的。     
我更喜欢第一种选择。假设您包含更多文件,并且这些文件又包含包含“ 8”的文件。 如果if9ѭ与
#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
    

要回复问题请先登录注册