是否可以使用包含#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);
}
答案 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编译器本身看到代码之前,宏在预处理阶段被替换文本替换。