6

所以我知道如何使用标准在我自己的头文件中放置一个包含保护

#ifndef ...
#define ...

现在,我的问题是关于包括不属于我自己的库。将是一个很好的例子。我有一个需要使用字符串的头文件,所以我执行以下操作

foo.h

#ifndef FOO_H
#define FOO_H

#include <string>

... code etc ...

#endif

现在,如果我有另一个名为 .. 的头文件,可以说,bar.h它也需要使用<string>,我如何防止多个包含?STL 是否已经包含防护装置?

4

3 回答 3

11

STL 库也有包含守卫,任何好的库都应该这样做。

#ifndef _GLIBCXX_STRING
#define _GLIBCXX_STRING 1

这是来自 gcc 的

于 2011-12-13T03:27:34.350 回答
6

假设您所说的“STL”是指 C++ 标准库,那么您可以参考 C++ 标准。§17.6.2.2/2状态:

翻译单元可以以任何顺序包含库头。每个都可以包含不止一次,与仅包含一次没有任何不同的效果,除了包含一个<cassert><assert.h>每次的效果取决于 NDEBUG 的词汇当前定义。

这意味着没有必要防止同一个标头的多个包含。

于 2011-12-13T03:38:43.157 回答
3

包括保护使用来保护保护对内的内容。您可以检查系统头文件string,它也有包含保护。所以,不要担心多个包含。

于 2011-12-13T03:28:54.290 回答