首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >头文件中需要包含哪些文件?结构?<stdbool.h>?

头文件中需要包含哪些文件?结构?<stdbool.h>?
EN

Stack Overflow用户
提问于 2010-02-11 05:27:52
回答 3查看 1.5K关注 0票数 3

假设我在"struct.h“中定义了一个结构,如下所示

代码语言:javascript
复制
struct box {
    int value; 
}

我在另一个文件"math.c“中使用了这个结构。

代码语言:javascript
复制
#include "struct.h"

struct box *sum(struct box *a1, struct box *a2) {
    struct box *a3 = malloc(sizeof (struct box));
    a3->value = a1->value + a2->value;
    return a3;
}

"math.h“也需要包括"struct.h”吗?

代码语言:javascript
复制
#include "struct.h"

struct box *sum(struct box *a1, struct box *a2);

如果struct box被bool替换了,我需要在头文件和c文件中都包含stdbool.h吗?看起来编译器想要这样。

什么时候应该在头文件而不是.c文件中包含文件?我也想知道我的例子有没有什么不寻常的地方。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-11 05:31:09

一般规则是在头文件中包含尽可能少的内容。

在可能的情况下使用转发声明而不是定义,然后可以将定义移动到.c文件。这可以减少需要包含在头文件中的文件数量。

在您的特定示例中,您可以从math.h和forward declare框中删除struct.h的include。这并不是说它在这个特定的案例中有很大的不同。

票数 4
EN

Stack Overflow用户

发布于 2010-02-11 05:32:37

中的"math.h“也需要包含"struct.h”吗?

不,因为在math.h (不是一个很棒的名字,BTW)中,你只需要处理指向一个类型的指针。只有在处理类型的实例时才需要该定义。但是,最好的做法是包含它,因为要与实际实例通信的用户必须自己单独包含它。

票数 3
EN

Stack Overflow用户

发布于 2010-02-11 05:30:34

如果头文件的内容使用由other includes定义的类型,则在头文件中包含other includes。(对不起,说得太多了。)

在您的例子中,math.h绝对应该包含struct.h,尽管我认为用户定义的头文件的名称也不好(前者是因为已经有了系统提供的math.h;后者是因为struct是一个关键字)。:-P

如果您的头文件使用bool,那么是的,它应该包含stdbool.h

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2240475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档