C 避免在没有包含保护的情况下重新声明错误

C 避免在没有包含保护的情况下重新声明错误,c,include,dependencies,redeclaration,C,Include,Dependencies,Redeclaration,如果我想避免在不使用include-guard的情况下重新声明错误,那么依赖关系树的基本规则是:仅一个或多个树 任何时候,当父母可以通过两种不同的方式联系时,就会发生违规行为 例如: 声明.h包括string.h 数据.h包括声明.h data.c包括data.h ui.c包括data.h和string.h 这会生成一个重新声明错误,因为ui.c和includes string.h有两种不同的方式:直接和通过data.h。因此,该结构不是树,因为ui.c有多条路径指向同一父级 有没有一种方法可以

如果我想避免在不使用include-guard的情况下重新声明错误,那么依赖关系树的基本规则是:仅一个或多个树

任何时候,当父母可以通过两种不同的方式联系时,就会发生违规行为

例如:

声明.h包括string.h
数据.h包括声明.h
data.c包括data.h
ui.c包括data.h和string.h

这会生成一个重新声明错误,因为ui.c和includes string.h有两种不同的方式:直接和通过data.h。因此,该结构不是树,因为ui.c有多条路径指向同一父级


有没有一种方法可以让多条路径指向同一个父级,而不会出现重新声明错误?

在研究了一段时间后,似乎必要的图形形状不是树。基本上,只要图没有循环,并且遵循一个基本规则,即到任何给定父对象只能有一条路径,依赖关系就会是干净的。例如:


因此,在这个网络中,我们看到父母是共享的,孩子也是可以共享的,但是没有任何地方存在从同一个孩子到任何给定父母的多条路由。形状的一个数学术语是不相交网络。在不相交的网络中,任何两条路径只能共享一个端点,而不能共享其他顶点/边。

我不明白。你能更清楚地陈述你的假设和你真正的问题吗?提出独特的包含保护可能比独特的依赖树容易得多。你到底想做什么?让生活变得轻松,在你写的每一个头文件上都要使用“includeguards”。这很简单,使用h作为防护罩。查看任何系统头文件:
#ifndef#h#define(定义)h
,在文件末尾:
#endif
这三行都是需要添加到头文件中的“include guard”(包含防护)我不想使用防护。我希望有一个干净的依赖网络,不依赖于警卫。我需要了解网络的可行形式来实现这一点。实现您想要的最简单的方法是“将所有内容放在一个文件中”——这是一个非常明确的依赖关系。这也表明了你想要达到的目标是多么不可取。你想使用守卫-你只是不知道而已。我建议你开始用你的编译器和系统包含文件来追求纯洁。确保您涵盖了定义交叉依赖关系(即倾向于相互调用的模块)的内容,下一个有趣的级别将是回调及其相关数据结构