假设我有以下代码(array* 函数是我们用于可调整大小的数组的函数,它们对空初始化的指向数组的指针进行操作):
typedef struct MyStruct
{
int i;
} MyStruct;
MyStruct* GetNewMyStruct(int i)
{
MyStruct* s = malloc(sizeof(MyStruct));
s->i = i;
return s;
}
int SomeFunction(int number, MyStruct *elem)
{
MyStruct **structs = NULL;
int i;
for (i = 0; i < number; i++)
arrayPush(&structs, GetNewMyStruct(i));
arrayPush(&structs, elem);
return arraySize(&structs);
}
我认为 SomeFunction 太大了,我想重构它。目前在我工作的地方,我们使用 VisualAssist X,它具有一些重构功能,但是当我在此使用它时,它无法正常工作。如果我尝试使用它来重构循环,这就是我得到的:
void MyMethod( int number, MyStruct ** structs )
{
int i;
for (i = 0; i < number; i++)
arrayPush(&structs, GetNewMyStruct(i));
}
int SomeFunction(int number, MyStruct *elem)
{
MyStruct **structs = NULL;
MyMethod(number, structs);
arrrayPush(&structs, elem);
return arraySize(&structs);
}
这是不正确的。MyMethod
应该采取 a MyStruct ***
,而不是 a MyStruct **
。这是因为我正在重构的代码采用structs
. 结果是重构后的版本总是返回 1(因为只有一个对象被推入我的数组),而不是number+1
. 是否有其他工具可以正确地进行这种类型的重构?