用索引定义数组值

#define an array value with index

本文关键字:数组 定义 索引      更新时间:2023-10-16

出于遗留原因,我需要维护旧的数组结构,但是编译器告诉我,我的'表达式语法'有问题。

我有:

#define Array[GlobalIndexVariable]    Get(GlobalIndexVariable)->SubType;

Get返回指向结构体的有效指针,该结构体包含SubType

现在我想象这是采取Array[GlobalIndexVariable]的每一个场合,并简单地将其转换为函数调用,但显然我错了。

我甚至不知道在这种情况下要搜索什么,所以如果有一点帮助,我将非常感激。

非常感谢。

编辑:因为它被询问了,下面是抛出错误的其中一行:

LocalVariable = Array[GlobalIndexVariable];

我想强调的是,我不想把它变成一个macro,而只是想用Get(GlobalIndexVariable)代替Array[GlobalIndexVariable];,所以只要使用GlobalIndexVariable以外的任何东西,替换就会失败并抛出不同的错误。

编辑:

只是为了确保我被理解了:

现在我有4个类型为int的长数组。我想把它们塞进一个结构体中,以标记它们属于一起(它们描述了同一事物的不同方面),但是我需要对前面的代码片段(几千个出现)进行批量解决方案。

:

int Index = 2;
int Array1[ANZ] = { 0, 1, 2 };
int Array2[ANZ] = { 0, 1, 2 };
int Array3[ANZ] = { 0, 1, 2 };
int Array4[ANZ] = { 0, 1, 2 };
if(Array1[Index] == 2) //doSomething
新:

struct {
    int Type, Conf, Foo, Bar;
};
if(Array1[Index] == 2) //doSomething

不触及Array1[Index] == 2,是否有可能使用定义或其他东西来获得与旧代码完全相同的行为?

使用自定义类型,您可以

struct MyType
{
    int& operator[](int index) const { return Get(GlobalIndexVariable)->SubType; }
};
#define Array MyType{}

Array[GlobalIndexVariable]

将被

取代
MyType{}[GlobalIndexVariable]

将调用

Get(GlobalIndexVariable)->SubType;

你的问题在你的#define

#define Array[GlobalIndexVariable]    Get(GlobalIndexVariable)->SubType;

[]不是宏调用的有效语法。如果你正在使用c++,你可以为你的数组类型写一个运算符[]。如果你在C区,你就有点麻烦了。您可能需要将所有内容替换为圆括号,而不是方括号。

我将执行替换,编写如下

#ifdef USE_OLD_SYNTAX
# define GET_ARRAY_VALUE(globalIndex) Array[globalIndex]
#else
# define GET_ARRAY_VALUE(globalIndex) Get(globalIndex)->SubType;
#endif

然后在你的代码中使用GET_ARRAY_VALUE,并通过查找和替换你之前的代码来检查USE_OLD_SINTAX你想使用哪个定义。

但也许它可以更简单的查找和替换在你的代码中没有宏。