-1

是否可以使用包含#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);
}
4

2 回答 2

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
于 2013-07-27T19:18:31.433 回答
2

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

于 2013-07-27T19:18:38.390 回答