我有一个名为 cpu.h 的文件,其中包括另外两个名为 register.h 和 addrmode.h 的头文件。在 cpu.h 中定义了一个 cpu_t 结构,这两者包括对其功能的需要。我尝试在另外两个包含文件中包含 cpu.h,但没有包含任何内容。我猜它们不包括在内,因为在 cpu.h 中设置了包含保护。有谁知道如何解决这个问题?
5 回答
cpu_t
在它自己的头文件中声明其他三个包含,也许types.h
?
循环包含可能会成为代码维护和调试的麻烦。我建议将 cpu.h 拆分为两个文件:一个包含 register.h 和 addrmode.h,另一个包含这两个文件。
要么安排 register.h 和 addrmode.h 以便它们不需要结构的定义,要么将结构的声明移动到它自己的标题中。
请注意,您不需要 cpu 的定义:
为 struct cpu 定义 typedef:
typedef struct cpu cpu_type;
定义指向 struct cpu 的变量或类型指针的成员:
结构 cpu *ptr;
声明一个 struct cpu 类型的外部变量:
外部结构 cpy myCpu;
声明采用 struct cpu 参数的函数:
void foo(结构 cpu p);
因此,需要在头文件中定义结构的主要原因不是提供该定义的主要原因是:
您在标题中定义了一个具有 struct cpu 类型成员的结构:
struct intelcpu { struct cpu base; };
您定义需要访问成员或具有该类型的局部变量的内联函数
您可以在 cpu.h 中定义 struct cpu_t 在它包含其他两个标头之前吗?
实际上,我更喜欢 Oren Trutner 的回答。我的答案要脆弱得多——你真的不想要相互递归的头文件。
您已经说过“不包括任何内容”,但这是基于其他一些观察的推论。你看到什么错误信息?我认为我们需要更多信息。