По причинам Устава мне нужно поддерживать структуру старого массива, однако компилятор говорит мне, что есть проблема с моим синтаксисом выражения.#define значение массива с индексом
Вот что у меня есть:
#define Array[GlobalIndexVariable] Get(GlobalIndexVariable)->SubType;
Get
возвращает действительный указатель на структуру, которая содержит SubType
Теперь я представлял себе это принять любой случай Array[GlobalIndexVariable]
и просто преобразовать его в вызов функции , но, видимо, я ошибся.
Я даже не знаю, что искать в этом контексте, поэтому небольшая помощь будет высоко оценена.
спасибо.
Edit: Так был задан вопрос, вот одна из линий, которые бросают ошибку:
LocalVariable = Array[GlobalIndexVariable];
Я хотел бы подчеркнуть, что я не ищу, чтобы сделать это в macro
, но многое скорее просто захотите заменить Array[GlobalIndexVariable];
на Get(GlobalIndexVariable)
, поэтому, как только ничего, кроме GlobalIndexVariable
, замена не сработает и пропустит другую ошибку.
Edit:
Просто чтобы быть абсолютно уверенным, что я понял:
Сейчас у меня есть 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
, можно использовать определения или что-то еще, чтобы получить точно такое же поведение, как и раньше для старого кода?
Это недопустимый синтаксис макроса. – molbdnilo
@Mat C++, фактически. Я добавил C, потому что это в основном проблема C. Кроме того, я не думаю, что перегрузка int - лучшая идея здесь. –
@molbdnilo Это не должно быть «макросом», а скорее простой заменой. Технически я хочу, чтобы компилятор работал в точном тексте, который у меня есть на правой стороне, а не на вычисленном значении. –