我有一个名为 cpu.h 的文件,其中包含另外两个名为 register.h 和 addrmode.h 的标头。 cpu.h 中定义了 cpu_t 结构,两者包含其功能的需要。我尝试将 cpu.h 包含在另外两个包含文件中,但没有包含任何内容。我猜测它们没有被包含在内,因为在 cpu.h 中设置了包含防护。有谁知道这个问题如何解决?
在其他三个包含的头文件中声明
cpu_t
,也许 types.h
?
循环包含可能会给代码维护和调试带来麻烦。我建议将 cpu.h 分成两个文件:一个包含 register.h 和 addrmode.h,另一个包含这两个文件。
要么安排 register.h 和 addrmode.h,以便它们不需要结构体的定义,要么将结构体的声明移至其自己的标头。
注意,你不需要cpu的定义:
为 struct cpu 定义 typedef:
typedef 结构体 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 { 结构cpu基数; };
您定义需要访问成员或具有该类型的局部变量的内联函数
您可以在 cpu.h 中定义 struct cpu_t ,然后再包含其他两个标头吗?
实际上,我更喜欢奥伦·特鲁特纳的回答。我的答案更加脆弱——你真的不想要相互递归的头文件。
您曾说过“不包含任何内容”,但这是基于其他一些观察的推论。您看到什么错误消息?我认为我们需要更多信息。