我有一个名为cpu. h的文件,其中包括另外两个名为register. h和addrmode. h的头文件。在cpu. h中定义了一个cpu_t结构体,这两个结构体包含了它们函数的需要。我尝试将cpu. h包含在另外两个包含文件中,但没有包含任何内容。我猜它们没有被包括在内,因为cpu. h中设置了包含警卫。有人知道如何解决这个问题吗?
kcugc4gi1#
将cpu_t放在它自己的头文件中,其他三个头文件也包括在内,也许是types.h?
cpu_t
types.h
gudnpqoy2#
对于代码维护和调试来说,循环包含可能会成为一件麻烦事。我建议将cpu.h拆分为两个文件:一个包含register. h和addrmode. h,另一个包含这两个文件。
slmsl1lt3#
要么安排register. h和addrmode. h,使它们不需要结构体的定义,要么将结构体的声明移到它自己的头部。注意,你不需要CPU的定义:
typedef struct cpu cpu_type;
struct cpu *ptr;
extern struct cpy;
void foo(struct);因此,需要在标头中定义结构(其目的不是提供该定义)主要原因是:
struct intelcpu { struct cpu base;};
6ioyuze24#
你可以在cpu. h中定义结构cpu_t,然后再包含其他两个头文件?事实上,我更喜欢Oren Trutner的回答。我的回答是更脆弱的---你真的不想要相互递归的头文件。
zaqlnxep5#
你说“什么都不包括在内”,但这是根据其他一些观察作出的推论。您看到了什么错误消息?我想我们需要更多的信息。
5条答案
按热度按时间kcugc4gi1#
将
cpu_t
放在它自己的头文件中,其他三个头文件也包括在内,也许是types.h
?gudnpqoy2#
对于代码维护和调试来说,循环包含可能会成为一件麻烦事。我建议将cpu.h拆分为两个文件:一个包含register. h和addrmode. h,另一个包含这两个文件。
slmsl1lt3#
要么安排register. h和addrmode. h,使它们不需要结构体的定义,要么将结构体的声明移到它自己的头部。
注意,你不需要CPU的定义:
typedef struct cpu cpu_type;
struct cpu *ptr;
extern struct cpy;
void foo(struct);
因此,需要在标头中定义结构(其目的不是提供该定义)主要原因是:
struct intelcpu { struct cpu base;};
6ioyuze24#
你可以在cpu. h中定义结构cpu_t,然后再包含其他两个头文件?
事实上,我更喜欢Oren Trutner的回答。我的回答是更脆弱的---你真的不想要相互递归的头文件。
zaqlnxep5#
你说“什么都不包括在内”,但这是根据其他一些观察作出的推论。您看到了什么错误消息?我想我们需要更多的信息。