c - 在 C 中使用标记串联访问和修改变量

标签 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 function)

任何人都可以建议我如何实现它,因为我很好奇解决这个问题。

最佳答案

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

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

关于c - 在 C 中使用标记串联访问和修改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54240698/

相关文章:

C 字符串化 : convert constant to integer

c - C 中全局/局部变量的内存对齐

c - AVR C : 8 Bit Counter using button

python - 在对字符串进行标记时,如何防止 spacy 的标记生成器拆分特定的子字符串?

twitter - 在 Lucene 中对 Twitter 帖子进行标记

c - 如何在 C 中使用字符串化在预处理器中执行计算

c - 格式指定类型 'char *' ,但参数的类型为 'char **'

c - 功能范围示例

java - 为什么 n+++n 有效而 n++++n 无效?

c - 如何修复此字符串错误