旧式 C 函数定义的转换器

编程


你好,

我已经使用一个巨大的遗留软件工作了 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 都有问题,因此在使用任何一个时都需要小心。

コメント

タイトルとURLをコピーしました