如果目标文件已经有头文件保护,我们应该使用#ifndef保护#include吗?

Sye*_*nun 0 c++ macros include-guards c-preprocessor

假设我们有两个类,Foo和Bar.

在Foo.h中

#ifndef MYPROJ_FOO
#define MYPROJ_FOO
....
# endif 
Run Code Online (Sandbox Code Playgroud)

在Bar.cpp中,我们还需要保护包括如

#ifndef MYPROJ_FOO
#include <Foo.h>
#endif
Run Code Online (Sandbox Code Playgroud)

还是简单#include 就足够了?如果我们已经有头球防守队员,那么对我来说似乎是多余的,但是我经常看到这样的练习,因此想知道我是否遗漏了什么.谢谢!

小智 5

从功能上讲,它没有任何区别.

旧代码可能正在使用它的原因是作为优化.这意味着预处理器可以避免Foo.h第二次读取,因此它可以更快地生成结果.

如今,即使预处理器第二次读取文件,其性能影响也应该足够小,不要打扰它.一些预处理器甚至可以自动检测标题保护,记住哪个标题保护与哪个宏相关联,并避免自己重新读取标题文件.