我有一个名为cpu.h的文件,其中包含另外两个名为register.h和addrmode.h的头文件。在cpu.h中定义了一个cpu_t结构,它们包含了对它们的功能的需求。我尝试在其他两个包含文件中包含cpu.h,但不包含任何内容。我猜他们不包括在内,因为在cpu.h中设置了包含警戒。有谁知道如何解决这个问题?
答案 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)
您已声明“不包括任何内容”,但这是基于其他一些观察的推论。您看到了什么错误消息?我想我们需要更多信息。