假设我在"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);如果struct box被bool替换了,我需要在头文件和c文件中都包含stdbool.h吗?看起来编译器想要这样。
什么时候应该在头文件而不是.c文件中包含文件?我也想知道我的例子有没有什么不寻常的地方。
谢谢!
发布于 2010-02-11 05:31:09
一般规则是在头文件中包含尽可能少的内容。
在可能的情况下使用转发声明而不是定义,然后可以将定义移动到.c文件。这可以减少需要包含在头文件中的文件数量。
在您的特定示例中,您可以从math.h和forward declare框中删除struct.h的include。这并不是说它在这个特定的案例中有很大的不同。
发布于 2010-02-11 05:32:37
中的"math.h“也需要包含"struct.h”吗?
不,因为在math.h (不是一个很棒的名字,BTW)中,你只需要处理指向一个类型的指针。只有在处理类型的实例时才需要该定义。但是,最好的做法是包含它,因为要与实际实例通信的用户必须自己单独包含它。
发布于 2010-02-11 05:30:34
如果头文件的内容使用由other includes定义的类型,则在头文件中包含other includes。(对不起,说得太多了。)
在您的例子中,math.h绝对应该包含struct.h,尽管我认为用户定义的头文件的名称也不好(前者是因为已经有了系统提供的math.h;后者是因为struct是一个关键字)。:-P
如果您的头文件使用bool,那么是的,它应该包含stdbool.h。
https://stackoverflow.com/questions/2240475
复制相似问题