在c中,在现有的代码库中有以下内容:
#define MYVAR (1)正如您所看到的,这是符合C中的良好实践,方法是用括号包围#define (尽管我知道在本例中它没有什么区别,因为这个值不是表达式)。不管怎么说,我想用这个来做绞线。当我这么做时:
#define STRINGIFY(x) #x
#define TO_STRING(x) STRINGIFY(x)
const char* mystring = TO_STRING(MYVAR) ;得到的字符串是"(1)“。我想去掉括号,而不用做简单操作:
#define MYVAR 1在c中的字符串化过程中是否有省略括号?
发布于 2013-08-26 17:24:42
只需使用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)被定义为(1)时,MYVAR扩展为(1)
如果MYVAR被定义为没有括号的1,则会出现编译时错误。
https://stackoverflow.com/questions/18447423
复制相似问题