Bru*_*nez 10 c c99 visual-c++
如何将c99源代码自动转换为c89?我想用Visual C++编译c99库,但MSVC只支持c89.许多更改只是语法,例如struct initializers,您可以自动编写"de-c99"代码的工具.这个预处理器是否存在?
你需要的是一个程序转换系统。这样的工具读取源代码,构建编译器数据结构(例如抽象语法树),允许您对这些结构应用(源到源)转换,然后可以从修改的数据结构重新生成源。
您需要一个可以解析 C99 并转换为 C89 的程序。我们的DMS 软件重新工程工具包可以使用其C 前端(可以处理 C 的两种方言,包括 MSVC 89 以及 ObjectiveC)来做到这一点。如果你想做到这一点,拥有一个成熟的解析器是必要的。
许多人可能会建议您只需要一个 C99 解析器即可。但实际上,事实并非如此。要对典型计算机语言进行任何有趣的转换,您需要符号表数据、一些数据流等。有关更多详细信息,请参阅我关于解析后的生活的文章,以及 DMS 如何提供这种生活。
其中一个方面是如何编码替换结构初始值设定项。您可以通过自定义代码来执行此操作,该代码遍历 C99 AST,找到此类结构初始值设定项,并按程序破解树。是的,这是可行的,但这并不容易,而且您必须了解大量有关树的结构的知识。DMS 提供源到源的重写,因此您可以编写识别要修改的习惯用法的模式,以及生成生成的习惯用法的模式,所有这些都使用 C 表层语法。