gpt4 book ai didi

c++ - 内部与外部包括 guard

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:45 25 4
gpt4 key购买 nike

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

这是 Herb & Andrei 的 C++ 编码标准一书的片段,其中显示了“外部包含防护”:

Avoid using the obsolete external include guards advocated in older books:

#ifndef FOO_HJNCLUDED_ //NOT recommended
#include "foo.h"
#define FOO_HJNCLUDED_
#endif

现在,这导致了下面的问题:

问:什么是内部包含守卫,什么是外部包含守卫?两者有什么区别,为什么 internal include guards 更受欢迎?
我希望答案也能提供一个例子。

编辑:我最终回答了我自己的问题。

最佳答案

这是我看到的可能解释评论的内容。

在这里,foo.h 定义了一个“内部包含守卫”(大多数人简称为“包含守卫”,因为这是传统的做法)。

// foo.h
#ifndef _FOO_H__
#define _FOO_H__

// ...

#endif // _FOO_H__

相比之下,bar.hfoo.h 之外使用了 foo.h 的 include guard。我们可以将其称为“外部包含守卫”。

// bar.h
#ifndef _BAR_H__
#define _BAR_H__

#ifndef _FOO_H__
#include "foo.h"
#endif

// ...

#endif // _BAR_H__

我参与的一个(非常大的)项目声称这提高了编译速度,但这种说法是可疑的,因为在我看来这似乎是一个微不足道的编译器优化,而且我还没有看到任何指标来证明这种说法。但是,我们确实注意到包含多个头文件时阅读起来很烦人。

关于c++ - 内部与外部包括 guard ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30789252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com