1

当我在 Microsoft Visual Studio 中创建头文件时,它只是一个空白文件,我经常添加一些函数或类的原型等......

当我从 Netbean 创建头文件时。它通常具有这种结构。(假设我的头文件是示例):

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

请告诉我,上面那一堆代码的含义。如果我删除这个,有什么问题吗?我觉得很奇怪,因为 VS 不会生成这个。

谢谢 :)

4

2 回答 2

3

这些称为包含防护,当您多次包含同一个文件时,它们可以防止多个定义错误。即使您不这样做,它们也不会伤害任何人,因此您不妨将它们留在里面。

它是如何工作的,它检查是否EXAMPLE_H定义了宏。如果是,它会忽略整个文件。如果不是,则定义它并保留该文件。这样,下次该文件出现时,内容就会被忽略。

如果您有两个包含相同标头的不同标头,通常会发生这种情况,例如:

#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

这些行确保文件只包含一次。它们可以防止在多个文件中包含 .h 时发生的链接错误。

于 2012-11-14T18:56:15.673 回答