gpt4 book ai didi

C++:NetBeans 在创建 header 时生成的一些行代码

转载 作者:行者123 更新时间:2023-11-30 02:58:54 25 4
gpt4 key购买 nike

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

b.h

#include "a.h"
#ifndef B_H
#define B_H
struct Bar
{
Foo x;
};
#endif

c.h

#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++:NetBeans 在创建 header 时生成的一些行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13385360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com