我不知道主题的名称是否确切地介绍了我的问题,但事情是: 在我的公司代码中,有一个函数,例如:
float func_x(float a){
float b
return b
}
该功能在大约1000个地方使用。现在添加了新功能:
void func_x2(void *a, void *b){
do sth
}
此函数应该替换代码中func_x
的所有操作,因此应该从(伪代码)进行更改:
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,所以代码根本不会改变?有人试过吗?
问候 Ĵ
答案 0 :(得分:4)
您不仅要替换函数的实现,还要签名。任何声明额外变量的宏肯定会导致错误,因为你无法在每个可以调用函数的站点声明变量。
最好的方法是使用编辑器的查找和替换功能,逐个修复。
答案 1 :(得分:4)
我不知道函数真正做了什么,但是如果x2只是x的扩展,你可以做类似的事情
float func_x(float a){
float b;
func_x2((void *)&a, (void *)&b);
return b;
}
答案 2 :(得分:0)
你想要什么是不可能的。你可以重命名/删除原始的func_x并用一个只调用func_x2的函数替换它。
答案 3 :(得分:0)
一个想法是使用一个regual表达式来替换旧函数的所有出现。
此正则表达式捕获了问题中给出的示例
^.*?\s(.*)\s*=\s*func_x\(\s*(.*)\)
然后你可以用这样的东西用
替换它float \2;\nfunc_x2\(\(void \*\)&\2, \(void\*\)&\1\)
当然,您可能需要稍微调整一下这个正则表达式,并且有不同的正则表达式,但它可以让您了解自己可以做什么。
答案 4 :(得分:0)
因为您正在尝试修改函数定义和实现,所以不可能。