C ++包括后卫

时间:2011-12-13 03:24:20

标签: c++ stl include-guards

所以我知道如何使用标准

在我自己的头文件中放置一个包含守卫
#ifndef ...
#define ...

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

foo.h中

#ifndef FOO_H
#define FOO_H

#include <string>

... code etc ...

#endif

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

3 个答案:

答案 0 :(得分:9)

STL库还包含防护装置,任何好的库都应该这样做。

#ifndef _GLIBCXX_STRING
#define _GLIBCXX_STRING 1

这是来自gcc的

答案 1 :(得分:5)

假设“STL”是指C ++标准库,那么您可以参考C ++标准。 §17.6.2.2/2声明:

  

翻译单元可以包括任何顺序的库标题。每个都可以被包含多次,除了包含<cassert><assert.h>的效果每次都取决于NDEBUG的词法当前定义之外,没有任何效果与被恰好包含一次有效。

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

答案 2 :(得分:3)

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