1

Microsoft Visual Studioでヘッダーファイルを作成すると、それは単なる空白のファイルであり、関数やクラスなどのプロトタイプを追加することがよくあります...

Netbeanからヘッダーファイルを作成するとき。多くの場合、この構造になっています。(私のヘッダーファイルが例であると仮定します):

#ifndef EXAMPLE_H
#define EXAMPLE_H
// put code here
#endif

上記のコードの束の意味を教えてください。これを削除しても問題ありませんか?VSはこれを生成しないので、私は奇妙に感じます。

ありがとう :)

4

2 に答える 2

3

これらはインクルードガードと呼ばれ、同じファイルを複数回インクルードするときに複数の定義エラーを防ぎます。あなたがそうしなくても、彼らは誰も傷つけないので、あなたは彼らをそのままにしておくほうがよいでしょう。

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

于 2012-11-14T18:55:28.030 に答える
0

これらの行は、ファイルが1回だけ含まれることを保証します。複数のファイルに.hを含めるときに発生するリンクエラーを防ぎます。

于 2012-11-14T18:56:15.673 に答える