Доступ и изменение переменных с помощью конкатенации токенов в C - PullRequest
0 голосов
/ 17 января 2019

Я читал о строковом преобразовании и вставке токена и пытался получить доступ к переменной, используя вставку токена и изменив ее значение. Возможна ли такая вещь?

Предположим, переменные a0 и a1 определены, и во время выполнения я хочу напечатать их значения с использованием вставки токена как printf("\n\rValue is %d",VAR_PARSER(0)); Это то, что я сделал.

#include "stdio.h"
#include "stdlib.h"

#define VAR_PARSER(dummyvar,index,value) do{\
dummyvar = index;\
a##dummyvar = value;\
}while(0);

unsigned char a0, a1, dummy;
int main (void)
{   
    unsigned char ucloopcnt;
    for(ucloopcnt = 0; ucloopcnt < 2; ucloopcnt++) VAR_PARSER(dummy,ucloopcnt,(ucloopcnt * 10));

    printf("\n\rValue is %d %d",a0,a1);

    return 0;
}

Теперь в этой строке a##dummyvar = value; я хотел выводить как a0 = 10; и a1 = 20; соответственно. Но похоже, что это переводит adummy и дает следующую ошибку adummy undeclared (first used in this funciton)

Может кто-нибудь подсказать мне, как мне этого добиться, так как мне любопытно решить это.

1 Ответ

0 голосов
/ 17 января 2019

Ваше ожидание, что a##dummyvar оценит как a<value of dummyvar>, в корне неправильно понимает, что делают макросы (то есть простая подстановка текста). Вывод adummy правильный.

Вы не можете добиться динамического доступа к значениям переменных во время выполнения с помощью макросов, как вы пытаетесь здесь, поскольку они оцениваются до компиляции и не знают состояния программы во время выполнения.

...