【问题标题】:Include a header in another header file在另一个头文件中包含一个头文件
【发布时间】:2011-07-17 15:59:39
【问题描述】:

我在 .h 文件中定义了 struct item。现在我在另一个.h 中定义另一个struct tPCB,它是同一个项目的一部分,我需要tPCB 有一个item。我认为仅仅制作同一个 TurboC 项目的一部分就可以让我在另一个头文件中使用 item,但是编译器会抛出“undefined type: ite”。

我想我必须以某种方式在第二个标题中包含第一个标题,但是我看到了相同的类似代码,但不这样做。

除了添加#include 行之外,还有其他方法可以让它工作吗?

【问题讨论】:

    标签: c header include


    【解决方案1】:

    永远不要将变量定义(即分配它们)放在头文件中。这很糟糕,原因有很多,其中两个主要原因是糟糕的程序设计和大量的链接器错误。

    如果您需要全局公开一个变量(实际上需要这样做的情况并不多),那么在 h 文件中将其声明为 extern 并在相应的 C 文件中分配。

    【讨论】:

      【解决方案2】:

      在您的“另一个 .h”中,#include <a .h file>

      阐述:

      在定义struct tPCB的文件中,需要#include定义struct item的文件。

      【讨论】:

        【解决方案3】:

        抱歉,在 C 语言中,您无法在不包含该文件的情况下访问另一个头文件中的结构定义(通过#include)。 #include 的说明如下。

        因此,假设包含项目结构定义的头文件称为“item.h”,而包含tPCB结构定义的头文件称为“tPCB.h”。在 tPCB.h 的顶部,您应该放置以下语句:

        #include "item.h"
        

        这应该让 tPCB.h 文件可以访问 item.h 中的所有定义。

        【讨论】:

          【解决方案4】:

          如果您的 .c #includes 两个 .h 文件的顺序正确,它将起作用。这可能就是你记得的案例中发生的事情。最安全的做法是 #include 每个定义依赖项的文件,并依靠每个 .h 中的包含保护来防止被多次定义。

          【讨论】:

          • @nmichaels,谢谢。易于修复,建议保持不变。
          • 好的,所以我已经将包含移动到第一个 .h 到主 .c 的第一行,我理解这是编译器要读取的第一行,以及问题仍然存在。
          • @Hallucynogenyc,您需要在主 .c 中包含两个 .h。第一个是定义item 的那个,接下来是定义tPCB 的那个。更好的是,将#include 放入定义tPCB 的.h 中。
          【解决方案5】:

          您需要使用#include。在 C 中,一切都是明确的;不要指望它会变魔术。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-14
            • 2014-11-25
            • 1970-01-01
            • 2021-04-28
            • 1970-01-01
            • 2016-04-13
            相关资源
            最近更新 更多