什么文件需要包含在头文件中?结构?文件<stdbool.h>?</stdbool.h>

时间:2010-02-10 21:27:52

标签: c

假设我在“struct.h”中定义一个结构,如此

struct box {
    int value; 
}

我在另一个文件中使用该结构说“math.c”

#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”吗?

#include "struct.h"

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

如果用bool替换了struct box,我是否需要在header和c文件中包含stdbool.h?好像编译器想要这个。

什么时候应该在标题中包含文件而不是.c?也想知道我的例子是否有些不寻常。

谢谢!

3 个答案:

答案 0 :(得分:3)

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

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

在您的具体示例中,您可以从struct.h移除math.h的包含,然后转发声明框。并不是说它在这个具体案例中有很大的不同。

答案 1 :(得分:3)

  

将“math.h”需要包括在内   “struct.h”也是?

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

答案 2 :(得分:2)

如果头文件的内容使用由此类包含的类型,则在头文件中包含其他包含。 (对不起,那是满口的。)

在你的情况下,math.h肯定应该包括struct.h,但我认为它们都不是用户定义的头文件的好名字(前者因为已经有系统提供的{{1}后者因为math.h是关键字)。 :-P

如果您的标头文件使用struct,那么是的,它应该包含bool