出于遗留原因,我需要维护旧的数组结构,但编译器告诉我,我的'表达式语法'存在问题。
这就是我所拥有的:
#define Array[GlobalIndexVariable] Get(GlobalIndexVariable)->SubType;
Get
返回一个指向结构的有效指针,该结构包含SubType
现在我想象这会占用Array[GlobalIndexVariable]
的每个场合并简单地将其转换为函数调用,但显然我错了。
我甚至不知道在这种情况下要搜索什么,所以一点点的帮助将受到高度赞赏。
非常感谢。
编辑: 自从被问及以来,这是引发错误的一条线:
LocalVariable = Array[GlobalIndexVariable];
我想强调一点,我不打算将其变为macro
,而只是想将Array[GlobalIndexVariable];
替换为Get(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
,是否可以使用定义或其他内容来获得与旧代码完全相同的行为?
答案 0 :(得分:2)
使用自定义类型,您可以
struct MyType
{
int& operator[](int index) const { return Get(GlobalIndexVariable)->SubType; }
};
#define Array MyType{}
然后
Array[GlobalIndexVariable]
将替换为
MyType{}[GlobalIndexVariable]
将调用
Get(GlobalIndexVariable)->SubType;
答案 1 :(得分:1)
您的问题出在#define
#define Array[GlobalIndexVariable] Get(GlobalIndexVariable)->SubType;
[]不是宏调用的有效语法。如果你正在做C ++,你可以为你的数组类型编写一个operator []。如果你在C中你有点受约束。你可能不得不用圆括号而不是方括号替换所有东西。
答案 2 :(得分:1)
我会进行替换,写下类似
的内容#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
检查您要使用的定义。
但也许在没有宏的情况下,在代码中找到并替换它可能更简单。