字符串化括号消除

时间:2013-08-26 15:14:59

标签: c c-preprocessor stringify

在c中,我在现有代码库中有以下内容:

#define MYVAR (1)

正如你所看到的那样,通过用括号括起#define来符合C中的良好实践(即使我知道在这种情况下它没有区别,因为值不是 一种表达)。无论我想在字符串化中使用它。当我这样做时:

#define STRINGIFY(x) #x
#define TO_STRING(x) STRINGIFY(x)

const char* mystring = TO_STRING(MYVAR) ;

结果字符串是“(1)”。我想删除括号,不用做简单的操作:

#define MYVAR 1

无论如何在c?

中的字符串化过程中消除括号

1 个答案:

答案 0 :(得分:3)

只需使用STRINGIFY x代替STRINGIFY(x)

#include <stdio.h>

#define MYVAR 1

#define STRINGIFY(x) #x
#define TO_STRING(x) STRINGIFY x

int main(void)
{
    const char *mystring = TO_STRING(MYVAR);

    printf("%s\n", mystring);
    return 0;
}
TO_STRING(x)定义为STRINGIFY (1)

时,

MYVAR会扩展为(1)

如果MYVAR被定义为没有括号的1,则会出现编译时错误。