当我在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/

10-11 22:45
查看更多