不包含定义为struct的头文件可以吗?

不包含定义为struct的头文件可以吗?,c,C,我有a.h: 也是b.h 它给出了以下错误: b.h:17:6: error: ‘aaa’ undeclared (first use in this function) 但是如果我删除XX行,编译就会成功 可以这样做吗?如果删除该行,编译可能会工作,但程序不会链接 你必须在某个地方定义aaa。 您的头文件必须被ifndef头文件包围。。。头球护板。 有两个彼此包含的头文件是程序设计糟糕的标志。 代码中任何地方出现extern都是程序设计糟糕的标志,很少有例外。 在一些情况下,您可以将静态内联

我有a.h:

也是b.h

它给出了以下错误:

b.h:17:6: error: ‘aaa’ undeclared (first use in this function)
但是如果我删除XX行,编译就会成功


可以这样做吗?

如果删除该行,编译可能会工作,但程序不会链接

你必须在某个地方定义aaa。 您的头文件必须被ifndef头文件包围。。。头球护板。 有两个彼此包含的头文件是程序设计糟糕的标志。 代码中任何地方出现extern都是程序设计糟糕的标志,很少有例外。 在一些情况下,您可以将静态内联函数定义放在头文件中,但大多数情况下这意味着程序设计不好。
摘要:非常糟糕的程序设计会导致非常糟糕的程序。

头中的非内联、非静态函数体本身就是一种代码味道。无论如何,您不需要在a.h中包含b.h,因此,如果这是为了解决循环包含依赖关系的尝试,那么首先不要这样做。@WhozCraig抱歉,这是一个静态内联void2头文件,相互依赖通常是设计不佳的标志,因为这暗示您的模块没有明确的责任。也许你应该考虑把它们分解成更小的模块,这样就只有单向关系了。你的例子缺少头标识符,它们对于99%的标题是重推荐的。您必须使用它们并转发声明,如果您不将代码重构为更小的模块,那么extern本身就是代码气味。
#include "a.h"

struct B {
 int asdf;
 int ghjk;
}
static inline void sth() { aaa.asdf*** }
b.h:17:6: error: ‘aaa’ undeclared (first use in this function)