我想这是一个非常愚蠢的问题,但我在我的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中......
但是在编译时我有一个无限循环。
我该如何解决这个问题?感谢
答案 0 :(得分:1)
您需要在file1.h
和file2.h
中使用包含警示。像
#ifndef FILE1_H_
#define FILE1_H_
/* ...
* code
*/
#endif /* FILE1_H_ */
答案 1 :(得分:1)
如@downhillFromHere所述,包括警卫是一个答案。除非你有一个很好的理由,否则所有头文件都应该包含防护。
但是,您的描述并未明确为什么需要file1.h
来包含file2.h
,反之亦然。头文件描述了一个接口。如果接口是依赖的,那么您应该考虑将它们组合成单个标头:file.h
。如果file1.h
和file2.h
中描述的接口是独立的,则它们不应相互包含。公开独立接口的正确方法是让file1.c
和file2.c
包含两个标头。
file1.c
和file2.c
:
#include "file1.h"
#include "file2.h"
这使接口解耦,这使您可以单独推断独立接口,减少错误,并可以大大减少编译时间。