将C99代码转换为C89

如何将c99源代码自动转换为c89? 我想用Visual C ++编译c99库,但MSVC只支持c89。 许多更改只是语法,例如struct初始化器,您可以自动编写“de-c99”代码的工具。 这个预处理器是否存在?

基于Clang的源到源转换器:

https://github.com/libav/c99-to-c89/

商业Comeau C / C ++编译器可以做到这一点。

或者,使用适当的C编译器(例如GCC或Clang via MinGW,Pelles C,Intel)并链接生成的目标文件。 但是,并非所有这些(特别是MinGW)都支持Microsoft的调试格式。

您需要的是程序转换系统 。 这样的工具读取源代码,构建编译器数据结构(例如抽象语法树 ,允许您在这些结构上应用(源到源)转换,然后可以从修改的数据结构重新生成源。

你需要一个可以解析C99,并转换为C89。 我们的DMS软件再造工具包可以使用它的C前端 (可以处理C的两种方言,包括MSVC 89,以及ObjectiveC)来实现这一点。 如果要执行此操作,则需要成熟的解析器。

许多人可能会建议您只需要一个C99解析器。 实际上,事实并非如此; 要对典型的计算机语言进行任何有趣的转换,您需要符号表数据,一些数据流等。有关详细信息,请参阅我的解析后的生活文章,以及DMS如何提供生命。

一个这样的方面是如何编码替换struct初始化器。 您可以通过自定义代码执行此操作,该代码遍历C99 AST,查找此类结构初始化程序,并在程序上破解树。 是的,这是有效的,但这并不容易,你必须知道大量的树结构。 DMS提供源到源重写,因此您可以编写识别您想要修改的习语的模式,以及产生结果习语的模式,所有这些都使用C表面语法。