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