【发布时间】:2021-09-24 08:00:23
【问题描述】:
有没有办法像下面的代码一样将 C 字符串作为定义的宏的一部分传递?
#define AAA_NUM 10
#define BBB_NUM 20
#define PREFIX_NUM(string) string##_NUM
int main()
{
char *name_a = "AAA";
char *name_b = "AAA";
printf("AAA_NUM: %d\n", PREFIX_NUM(name_a));
printf("BBB_NUM: %d\n", PREFIX_NUM(name_b));
return 0;
}
预期输出
AAA_NUM: 10
BBB_NUM: 20
【问题讨论】:
-
name_a和name_b的值对预处理器不可用,因此您的宏实际上看到了名称name_a和name_b。您可以将它们转换为string_name_a和string_name_b,但这显然不是您想要的。您需要了解预处理器在解析 C 代码之前执行简单的文本翻译。一旦你理解了这一点,你就会明白为什么这不能达到你想要的效果。 -
我认为您正在尝试提出一个答案而没有该答案解决的问题......您到底需要这个做什么?