寻找宏将取代功能

looking for macro which will replace function

本文关键字:功能 取代 寻找      更新时间:2023-10-16

我不知道主题名称是否完全介绍了我的问题,但事实是:在我的公司代码中,有一个函数,例如:

float func_x(float a){
      float b
      return b
}

这个函数出现在大约1000个地方。现在添加了新功能:

void func_x2(void *a, void *b){
     do sth
}

此函数应替换代码中出现的所有func_x,因此更改应从(pseudocode):

float p = 123.33;
float x = func_x(p) 
to:
float x;
float p = 123.33;
func_x2((void *)&p, (void*)&x);

我的问题是:是否甚至可能编写一些C宏(甚至非常复杂),将func_x替换为func_x2,因此代码根本不会改变?有人试过吗?

的问候J

您不仅替换了函数的实现,而且还替换了它的签名。任何声明额外变量的宏都肯定会导致错误,因为你不能在每个可以调用函数的站点都声明变量。

最好的方法是使用编辑器的查找和替换函数,逐个修复这个问题。

我不知道这些函数到底是做什么的,但如果x2只是x的扩展,你可以这样做

float func_x(float a){
  float b;
  func_x2((void *)&a, (void *)&b);
  return b;
}

你想要的是不可能的。不过,您可以重命名/删除原来的func_x,并将其替换为只调用func_x2的函数。

不可能,因为您正在尝试修改函数定义和实现。

一个想法是使用正则表达式来替换旧函数的所有出现。

这个正则表达式捕获问题

中给出的示例
^.*?s(.*)s*=s*func_x(s*(.*))

然后你可以像这样用

替换它
float 2;nfunc_x2((void *)&2, (void*)&1)

当然,你可能需要稍微调整一下这个正则表达式,并且有不同风格的正则表达式,但它给了你一个想法,你可以做什么