为所有使用的函数实例添加新参数

时间:2017-10-30 04:10:09

标签: c eclipse

我重构遗留函数并在现有函数中添加新参数,我必须手动将其添加到所有实例。 例如:

//legacy code 
#include "func.h"
func(void) //function in a .c file used in many files

//refactored code
#include "func.h"
func(int a) //all used instances fail(obviously).

有没有办法可以在不手动更改所有失败实例的情况下添加要在所有调用中调整的新参数?

我正在使用Eclipse IDE进行c项目。

注意:我不想使用" int a"作为要在所有文件之间共享的全局变量。只是寻找一种简单的方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

不,必须修改func的所有调用者以传入参数。

答案 1 :(得分:1)

对于特殊情况,有一种替代方案,其中大多数呼叫将给出相同的值 您可以设置默认值。这将允许您保持这些调用不变,无论如何都会给出默认值 C中的实现假定:

a)无论如何,您必须使用非默认值编辑来电 b)无论如何,你必须在相应的标题中编辑原型
c)无论如何,你必须编辑定义函数的代码

以下是如何根据这些假设在C中实现默认值:

func.h,假设当前内容:

void func(void);

func.h,新内容:

void func(void);
void funcA(int a);

func.c,假设当前内容:

#include "func.h"
void func(void)
{ /* ... */ }

func.c,新内容:

#include "func.h"

static const int iDefaultForFunc = 42;
/* as desired, this is NOT used as global variable */

void func(void)
{
    funcA(iDefaultForFunc);
}

void funcA(int a)
{
    /* ... */
    /* probably some use of a */
}

NonDefaultCaller.c:

/* somewhere */
funcA(43); /* calling with special value */

DefaultCaller.c,无需更改:

/* somewhere */
func(); /* ends up calling funcA(iDefaultForFunc); */