【发布时间】:2022-11-10 17:23:29
【问题描述】:
正如我们所知,C 头文件中的结构顺序很重要。 以下将导致编译错误:
struct a {
int i;
struct b;
}
struct b {
int x;
int y;
}
当编译器处理“a”时,“b”不存在。
任务: 我有一个自动生成的 C 头文件,里面装满了像这样的问题。 我必须想出一个脚本(任何东西)来正确地重新排序这些结构。 注意:结构嵌套的最大深度是未知的(一个结构有一个结构有一个结构等等。)
我想知道对此进行排序的最快方法是什么? 谢谢,
最后,我的代码必须生成一个无错误的标头。
【问题讨论】:
-
是否可以修复自动生成工具以执行您想要的操作?解析和更改 C++ ode 可能会更加困难。
-
根据您需要为这个自动生成的文件处理多少 C 语言,您可以使用基本模式匹配来解析它。足以确定结构名称、嵌套和用法。从那里构建一个依赖图将相当简单,您可以使用深度优先或拓扑遍历对其进行排序。前提是没有循环依赖。
-
生成器如何确保没有像
struct a { struct b x; }; struct b { struct a x; };这样的循环引用?在您的问题中讲述有关生成器和数据源的详细信息可能有助于找到解决方案。 -
Yksisarvinen 说的是解析很难,代码生成前后不是同一个问题。另一方面,根据定义,产生非法代码的代码生成器是一个错误。你为什么不修复错误?
-
这里最快的解决方案是一开始就不要产生垃圾 C 代码。无论生成什么,都应该知道它正在发出什么,并且应该能够使用简单的依赖检查对它们进行排序。
标签: python c++ c sorting header