所以我知道如何使用标准
在我自己的头文件中放置一个包含守卫#ifndef ...
#define ...
现在,我的问题是关于包含不属于我自己的库。将是一个很好的例子。我有一个头文件需要使用字符串,所以我做了以下
foo.h中
#ifndef FOO_H
#define FOO_H
#include <string>
... code etc ...
#endif
现在,如果我有另一个名为...的头文件,让我们说bar.h
,它还需要使用<string>
,我该如何防止多次包含? STL是否已经包含防护装置?
答案 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
,它也有包含保护。所以,不要担心多重内容。