我听说您应该更喜欢编写内部包含防护,而不是外部包含防护。我已经在互联网上进行搜索,但没有找到答案。
这是Herb&Andrei撰写的C++编码标准书的摘录,其中显示了“外部包含防护”:
#ifndef FOO_HJNCLUDED_ //NOT recommended
#include "foo.h"
#define FOO_HJNCLUDED_
#endif
现在,这导致了以下问题:
问:
什么是内部包含防护,什么是外部包含防护?两者之间有什么区别?为什么首选内部包含防护?我想答案也提供了一个例子。
编辑:我最终回答了我自己的问题。
最佳答案
我看到的一些内容可能解释了此评论。
在这里,foo.h
定义了一个“内部包含防护”(大多数人简称为“包含防护”,因为这是传统的操作方式)。
// foo.h
#ifndef _FOO_H__
#define _FOO_H__
// ...
#endif // _FOO_H__
相反,
bar.h
使用的是foo.h
之外的foo.h
的include防护。我们可以将其称为“外部包含防护”。// bar.h
#ifndef _BAR_H__
#define _BAR_H__
#ifndef _FOO_H__
#include "foo.h"
#endif
// ...
#endif // _BAR_H__
我从事的一个(很大)项目声称编译速度有所提高,但是这种说法是可疑的,因为在我看来,这就像是琐碎的编译器优化,而且我还没有任何度量可以证明这种说法。但是,我们确实注意到,在包含多个头文件时进行读取很烦人。
关于c++ - 内部与外部包含防护,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30789252/