我听说您应该更喜欢编写内部包含防护,而不是外部包含防护。我已经在互联网上进行搜索,但没有找到答案。

这是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/

10-11 07:21