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状態:

翻訳ユニットには、ライブラリヘッダーを任意の順序で含めることができます。それぞれが複数回含まれる場合がありますが、正確に1回だけ含まれる場合と違いはありません。ただし、いずれかを含めるか、<cassert>または<assert.h>NDEBUGの字句的に現在の定義に毎回依存する場合を除きます。

これは、同じヘッダーが複数含まれるのを防ぐ必要がないことを意味します。

于 2011-12-13T03:38:43.157 に答える
3

ガードペア内のコンテンツをガードするためのガードの使用を含めます。システムヘッドファイルを確認できますstring。インクルードガードもあります。したがって、複数の包含について心配する必要はありません。

于 2011-12-13T03:28:54.290 に答える