假设我在“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?也想知道我的例子是否有些不寻常。
谢谢!
答案 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
。