我一直在阅读有关字符串化和标记粘贴的内容,并且尝试使用标记粘贴来访问变量并修改其值。这样的事可能吗?
假设变量 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 function)
任何人都可以建议我如何实现它,因为我很好奇解决这个问题。
最佳答案
您的期望a##dummyvar
将评估为 a<value of dummyvar>
从根本上误解了宏的作用(即简单的文本替换)。 adummy
的输出是正确的。
您无法通过宏在运行时实现变量值的动态访问,就像您在此处尝试的那样,因为它们在编译之前进行评估,并且不了解程序在运行时的状态。
关于c - 在 C 中使用标记串联访问和修改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54240698/