当我在 Microsoft Visual Studio 中创建头文件时,它只是一个空白文件,我经常添加一些函数或类的原型等......
当我从 Netbean 创建头文件时。它通常具有这种结构。(假设我的头文件是示例):
#ifndef EXAMPLE_H
#define EXAMPLE_H
// put code here
#endif
请告诉我,上面那一堆代码的含义。如果我删除这个,有什么问题吗?我觉得很奇怪,因为 VS 不会生成这个。
谢谢 :)
这些称为包含防护,当您多次包含同一个文件时,它们可以防止多个定义错误。即使您不这样做,它们也不会伤害任何人,因此您不妨将它们留在里面。
它是如何工作的,它检查是否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
.
这些行确保文件只包含一次。它们可以防止在多个文件中包含 .h 时发生的链接错误。