[ad_1]
你好,
我已经使用一个巨大的遗留软件工作了 6 年。
该软件包含数千个带有许多参数的旧式 C 函数。
这是一个带有几个参数的示例:
old_function (x,y,z) int x; int y; int z; { // some code return (0); }
当我刚进公司的时候,我通过删除代码来更改代码
圆括号之间并替换 ; 经过 ,:
old_function (int x, int y, int z) { // some code return (0); }
当时我不知道参数可以这样交换:
old_function (x,y,z) int y; int x; int z; { // some code return (0); }
这里我的修正方法是交换x和y,这是致命的。
我后来发现了这一点,因为程序显示了未定义的行为导致
通过我的一项更改。
但我之前已经更改了数百个函数,最多有 20 个参数。
所以我现在需要的是一个解析器,它可以解析所有没有我修改的代码,找到旧式函数定义并报告
交换了参数。
有谁知道这样的工具是否存在? 或者一些我可以使用的 C 或 C++ 代码
作为基础并根据我的需要进行修改?
谢谢,兄弟
基督教
我尝试过的:
我开始用手做。 🙁
解决方案1
最好的选择是废弃修改后的版本,并恢复到原始版本。 然后,如果您必须重构定义,请编写代码来从原始的工作版本执行此操作,而不是尝试手动检查每个函数。
我不知道任何现有软件可以纠正您当前的版本,因此您必须编写它 – 这是恢复到已知良好版本的工作量的两倍!
解决方案2
曾经有一个随 GCC 一起发布的实用程序,称为 protoize,可以帮助将 K&R 函数定义转换为 ANSI。 然而,它似乎在 gcc 4 左右就停止了,这可以追溯到 2005 年左右。这里有一些有关问题的信息: 原型化注意事项[^] 如果没有适合您的节目,您也许可以从源代码树中提取 protoize,并尝试编译它。 还有 cproto : CPROTO – 生成函数原型[^] 虽然该项目似乎已不复存在,但您也许可以追踪它的源代码。 据我所知,cproto 和 protoize 都有问题,因此在使用任何一个时都需要小心。
[ad_2]
コメント