棘手的包括C的情况

时间:2009-08-08 19:10:50

标签: c include include-guards

我有一个名为cpu.h的文件,其中包含另外两个名为register.h和addrmode.h的头文件。在cpu.h中定义了一个cpu_t结构,它们包含了对它们的功能的需求。我尝试在其他两个包含文件中包含cpu.h,但不包含任何内容。我猜他们不包括在内,因为在cpu.h中设置了包含警戒。有谁知道如何解决这个问题?

5 个答案:

答案 0 :(得分:10)

在自己的头文件中声明cpu_t其他三个包含的内容,可能是types.h

答案 1 :(得分:3)

循环包含可能会成为代码维护和调试的麻烦。我建议将cpu.h分成两个文件:一个是register.h,另一个是addrmode.h,还有一个包含这两个文件。

答案 2 :(得分:1)

安排register.h和addrmode.h,使它们不需要结构的定义,或者将结构的声明移动到它自己的标题。

请注意,您不需要cpu的定义:

  • 为struct cpu定义一个typedef:

    typedef struct cpu cpu_type;

  • 定义变量或指向struct cpu的类型指针的成员:

    struct cpu * ptr;

  • 声明struct cpu:

    类型的extern变量

    extern struct cpy myCpu;

  • 声明一个struct cpu参数的函数:

    void foo(struct cpu p);

因此,需要在标题中定义结构的主要原因是为了不提供该定义:

  • 在头文件中定义一个结构为struct cpu:

    的结构

    struct intelcpu {    struct cpu base; };

  • 您定义需要访问成员或具有该类型的局部变量的内联函数

答案 3 :(得分:0)

你可以在cpu.h中定义struct cpu_t,然后再包含其他两个头文件吗?

实际上,我更喜欢Oren Trutner的回答。我的答案更脆弱 - 你真的不想要相互递归的头文件。

答案 4 :(得分:0)

您已声明“不包括任何内容”,但这是基于其他一些观察的推论。您看到了什么错误消息?我想我们需要更多信息。