【问题标题】:What is the correct way to include headers between two files in C在C中的两个文件之间包含标题的正确方法是什么
【发布时间】:2014-10-08 17:58:37
【问题描述】:

我想这是一个非常愚蠢的问题,但我在我的 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... 但是我在编译的时候有一个无限循环。

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

【问题讨论】:

  • 将头文件和函数放在一个头文件中,#include 放在file1.c 和file2.c 中

标签: c header include


【解决方案1】:

您需要在file1.h 和file2.h 中使用包含保护。像

#ifndef FILE1_H_
#define FILE1_H_

/* ...
 * code
 */

#endif /* FILE1_H_ */

【讨论】:

    【解决方案2】:

    如@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"
    

    这样可以保持接口解耦,让你可以分别推理独立的接口,减少错误,并且可以大大减少编译时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2014-05-23
      • 2021-08-29
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 2019-07-28
      相关资源
      最近更新 更多