头文件2中需要头文件1中的struct,我该怎么做?

时间:2011-08-28 20:35:23

标签: c

我在头文件1中使用了一个结构。我现在还需要头文件2中的结构,因为它用在函数原型中。我在头文件2中包含了头文件1,但这会在编译后给出很多关于类型重新定义的抱怨吗?有一种直截了当的方法吗?我已经搜索了嵌套的头文件,但这给了我相当复杂的文章。我想知道是否有一种简单的方法可以做到这一点?

3 个答案:

答案 0 :(得分:3)

当然有。使用include guards

file1.h

#ifndef FILE1_H
#define FILE1_H

/* Define everything here. */

#endif

这样你可以反复包含file1.h。特别是,如果标题定义事物,则应始终使用包含保护。

作为旁注,如果您不需要结构的详细信息(也就是说,它应该是不透明的类型),您可以使用不完整的类型,并在顶部说struct yourstruct;。 / p>

答案 1 :(得分:1)

我相信您的头文件没有防范包含防护以防止重新定义。他们应该是

//header.h
#ifndef SOME_LONG_UNIQUE_NAME
#define SOME_LONG_UNIQUE_NAME

//header contents here

#endif

作为旁注,您不需要所有头和结构定义来声明函数参数。前瞻声明就足够了。

struct C; //not including C.h
struct C* f(struct C* p);

这减少了代码耦合和加速编译

答案 2 :(得分:0)

标题文件1:

#ifndef HEADERFILE1_H
#define HEADERFILE1_H

//...
#endif

标头文件2:

#ifndef HEADERFILE2_H
#define HEADERFILE2_H

#include "headerfile1.h"

//...
#endif