首先,我不是在寻找一种能够从现有的cpp代码库中生成无法维护的C代码的工具。这是客户的要求,所以我不能只使用CPP代码库本身。
我正在尝试制定工作流程,以便我可以在不破坏代码的情况下逐步将代码库从CPP转换为C.我已经考虑了一些使用" extern C"方法
你们可以再添加一下吗? 并指出潜在的陷阱? 由于NDA,我无法共享代码库。 代码库本身并不庞大。它有大约50个cpp文件,看到了100多个类。
提前致谢。
P.s我已经经历了其他一些听起来相似的问题。但他们并没有真正拥有我正在寻找的工作流程。
[结束]:尽管该帖子因为过于宽泛而被搁置,但许多评论实际上都很有用。我比以前更清楚需要做什么。谢谢。
答案 0 :(得分:9)
嗯,你需要解决一个很长的清单。在没有声称完整的情况下,您还需要:
但不要自欺欺人。 std::map<std::string, std::pair<int, int>>
是一个非常简单的类,为每个字符串存储两个int。该课程的C语翻译完全混乱。 MyMap["five,three"] = std::make_pair(5,3)
可以很容易地成为100多行C代码。
答案 1 :(得分:4)
如果您的C ++代码广泛使用OO结构 - 特别是继承和多态 - 您可能希望查看一些在C中模仿它的C库.qobject(来自qemu源代码树)是我熟悉的,但更好已知(几乎每个人都禁止我)是http://en.wikipedia.org/wiki/GObject来自油嘴滑舌。如今,这与GUI代码无关。
这里的优点是您可以更改使用中的语言,而无需对程序流进行太多更改。
glib还提供了许多其他有用的库构造。
答案 2 :(得分:2)
遵循建议以GObject为例,如何用C语言完成C ++代码,你可以尝试一下:
Vala是一种类似C#的语言;除了你必须在每个函数签名中重复“公共”或“私有”,以及在使用的类类型中摆脱指针星,你不需要做太多事情。
当然,生成的C代码看起来与其他生成器看起来一样难看,但至少有一些简短的方法可以使它成为一个“可维护”的代码(主要问题是在Vala结果中创建的每个对象)在C代码中递增引用计数器,这并不总是必要的。)
GObject模型可以是一个很好的指令/示例,关于如何在C中将C ++构造转换为相同的。如果你不使用异常(Vala会这样做:)),那应该没有问题。当然主要的指导方针是: