在C语言中使用令牌串联访问和修改变量

时间:2019-01-17 16:52:05

标签: c tokenize stringification

我一直在阅读有关字符串化和令牌粘贴的信息,我试图使用令牌粘贴访问变量并修改其值。这样的事情有可能吗?

假设已定义变量a0a1,并且在运行时我想使用标记粘贴为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 :(得分:2)

您对a##dummyvar评估为a<value of dummyvar>的期望从根本上误解了宏的功能(即简单的文本替换)。 adummy的输出正确。

您无法像在此处尝试的那样在运行时通过宏实现对变量值的动态访问,因为变量是在编译之前进行评估的,并且不了解运行时程序的状态。