gre*_*rep 5 c++ stl include-guards
所以我知道如何使用标准将包含警卫放在我自己的头文件中
#ifndef ...
#define ...
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是包括不属于我自己的库.将是一个很好的例子.我有一个头文件,需要使用字符串,所以我做了以下
foo.h中
#ifndef FOO_H
#define FOO_H
#include <string>
... code etc ...
#endif
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个名为的另一个头文件..让我们说bar.h,这也需要使用<string>,我该如何防止多个包含?STL是否已经包含防护装置?
Adr*_*ish 11
STL库还包括防护,任何好的库都应该这样做.
#ifndef _GLIBCXX_STRING
#define _GLIBCXX_STRING 1
Run Code Online (Sandbox Code Playgroud)
这是来自gcc的
假设"STL"是指C++标准库,那么您可以参考C++标准.§17.6.2.2/2状态:
翻译单元可以包括任何顺序的库标题.每个可以被包括不止一次,除了每次包含
<cassert>或<assert.h>依赖于NDEBUG的词法当前定义的效果之外,没有任何效果与仅包括一次有效.
这意味着没有必要防止同一标题的多个包含.