これらはインクルードガードと呼ばれ、同じファイルを複数回インクルードするときに複数の定義エラーを防ぎます。あなたがそうしなくても、彼らは誰も傷つけないので、あなたは彼らをそのままにしておくほうがよいでしょう。
EXAMPLE_H
それがどのように機能するか、それはマクロが定義されているかどうかをチェックします。そうである場合は、ファイル全体が省略されます。そうでない場合は、それを定義し、ファイルを保持します。そうすれば、次にこのファイルが表示されるときに内容が省略されます。
これは、次のように、同じヘッダーを含む2つの異なるヘッダーがある場合によく発生します。
ああ
#ifndef A_H
#define A_H
struct Foo {};
#endif
bh
#include "a.h"
#ifndef B_H
#define B_H
struct Bar
{
Foo x;
};
#endif
ch
#include "a.h"
#ifndef C_H
#define C_H
struct Baz
{
Foo f;
};
#endif
次に、でstuff.cppを作成します
#include "b.h"
#include "c.h"
Bar y;
Baz z;
stuff.cppを前処理した後、
struct Foo {};
struct Bar
{
Foo x;
};
struct Baz
{
Foo f;
};
Bar y;
Baz z;
とは対照的に(警備員を含まない)
struct Foo {};
struct Bar
{
Foo x;
};
struct Foo {};
struct Baz
{
Foo f;
};
Bar y
これにより、の複数の定義に関するエラーが発生しますFoo
。