在C中的两个文件之间包含标头的正确方法是什么

时间:2014-10-08 17:58:37

标签: c header include

我想这是一个非常愚蠢的问题,但我在我的C程序中遇到了一个小问题:

我们说我有file1.c和file2.c

我在file1.c和file2.c中使用了在file2.c中声明的结构 我也在file2.c中使用file1.c函数

所以我做的是将#include "file1.h"放在file2.h中,将#include "file2.h"放在file1.h中...... 但是在编译时我有一个无限循环。

我该如何解决这个问题?感谢

2 个答案:

答案 0 :(得分:1)

您需要在file1.hfile2.h中使用包含警示。像

这样的东西
#ifndef FILE1_H_
#define FILE1_H_

/* ...
 * code
 */

#endif /* FILE1_H_ */

答案 1 :(得分:1)

@downhillFromHere所述,包括警卫是一个答案。除非你有一个很好的理由,否则所有头文件都应该包含防护。

但是,您的描述并未明确为什么需要file1.h来包含file2.h,反之亦然。头文件描述了一个接口。如果接口是依赖的,那么您应该考虑将它们组合成单个标头:file.h。如果file1.hfile2.h中描述的接口是独立的,则它们不应相互包含。公开独立接口的正确方法是让file1.cfile2.c包含两个标头。

file1.cfile2.c

#include "file1.h"
#include "file2.h"

这使接口解耦,这使您可以单独推断独立接口,减少错误,并可以大大减少编译时间。