And*_* DM 6 c++ include-guards header-files
我听说您应该更喜欢编写内部包含守卫而不是外部包含守卫。
我在互联网上搜索过,但没有找到答案。
这是 Herb & Andrei 所著的 C++ Coding Standards 一书的片段,其中显示了“外部包含保护”:
避免使用旧书中提倡的过时的外部包含保护:
#ifndef FOO_HJNCLUDED_ //NOT recommended
#include "foo.h"
#define FOO_HJNCLUDED_
#endif
Run Code Online (Sandbox Code Playgroud)
现在,这导致了以下问题:
问:
什么是内部包含保护,什么是外部包含保护?两者之间有什么区别,为什么首选内部包含守卫?
我希望答案也提供了一个例子。
编辑:我最终回答了我自己的问题。
这是我看到的可能解释了评论的内容。
在这里,foo.h定义了“内部包含守卫”(大多数人简称为“包含守卫”,因为这是传统的做法)。
// foo.h
#ifndef _FOO_H__
#define _FOO_H__
// ...
#endif // _FOO_H__
Run Code Online (Sandbox Code Playgroud)
与此相反,bar.h使用foo.h的包括防护罩外foo.h。我们可以将其昵称为“外部包含保护”。
// bar.h
#ifndef _BAR_H__
#define _BAR_H__
#ifndef _FOO_H__
#include "foo.h"
#endif
// ...
#endif // _BAR_H__
Run Code Online (Sandbox Code Playgroud)
我参与的一个(非常大的)项目声称这提高了编译速度,但这种说法是可疑的,因为在我看来这就像一个微不足道的编译器优化,而且我还没有看到任何指标来证明这一说法。但是,我们确实注意到在包含多个头文件时阅读起来很烦人。
| 归档时间: |
|
| 查看次数: |
1959 次 |
| 最近记录: |