首页 > 解决方案 > 在 C 中使用标记连接访问和修改变量

问题描述

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

假设变量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)

谁能建议我如何实现它,因为我很想解决这个问题。

标签: ctokenizestringification

解决方案


您的期望a##dummyvara<value of dummyvar>从根本上误解宏的作用(即简单的文本替换)。的输出adummy是正确的。

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


推荐阅读