当我在Microsoft Visual Studio中创建头文件时,它只是一个空白文件,并且我经常添加一些函数或类的原型(prototype)...
当我从Netbean创建头文件时。它通常具有这种结构。 (假设我的头文件是示例):
#ifndef EXAMPLE_H
#define EXAMPLE_H
// put code here
#endif
请告诉我,上面这些代码的含义。如果我删除它,有什么问题吗?我感到很奇怪,因为VS不会生成此代码。
谢谢 :)
最佳答案
这些称为包含防护,它们在多次包含同一文件时可防止出现多个定义错误。即使您不这样做,它们也不会伤害到任何人,因此您最好将它们留在里面。
它是如何工作的,它检查是否定义了EXAMPLE_H
宏。如果是这样,它将忽略整个文件。如果不是,它将定义它并保留文件。这样,下次出现此文件时,内容将被删除。
如果您有两个包含相同 header 的不同 header ,则经常发生这种情况,例如:
啊
#ifndef A_H
#define A_H
struct Foo {};
#endif
高度
#include "a.h"
#ifndef B_H
#define B_H
struct Bar
{
Foo x;
};
#endif
。
#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
的多个定义的错误。关于c++ - C++:NetBeans在创建 header 时会生成一些行代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13385360/