在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?
中的字符串化过程中消除括号答案 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
,则会出现编译时错误。