如何使用包含宏名称的字符串获取宏的值?

时间:2013-07-27 19:15:56

标签: c string c-preprocessor

是否可以使用包含#define名称的字符串获取宏的值?或者在编译代码后是否无法通过其名称访问宏?

指出我在追求的是什么:

#define NAME "VALUE"
char string[5];

// I want the content of string to be changeable to access any define
strncpy(string, "NAME", 4);
fprintf(stderr, "%s\n", string);

我想要输出: VALUE

修改 由于MOHAMED的回复,我找到了这个解决方案:

#define NAME "VALUE"
char string[5];

strncpy(string, "NAME", 4);

if(strncmp(string, "NAME", 4) == 0) {
    fprintf(stderr, "%s\n", NAME);
}

2 个答案:

答案 0 :(得分:3)

直接使用宏名称

strncpy(string, NAME, 4);

您无法编辑宏

定义的字符串的内容

在编译阶段评估宏。编译器生成第二个代码(称为预处理器代码)。此代码由编译器生成,其中编译器通过其内容替换宏。

所以,如果你的第一个代码是

#define NAME "VALUE"
char string[5];

strncpy(string, NAME, 4);
fprintf(stderr, "%s\n", string);

编译器生成的代码将是

char string[5];

strncpy(string, "VALUE", 4);
fprintf(stderr, "%s\n", string);

您可以使用以下命令查看预处理器代码:

gcc -E file.c

答案 1 :(得分:2)

不,你不能这样做。在C编译器本身看到代码之前,宏在预处理阶段被替换文本替换。