首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强化Parentheses消除

强化Parentheses消除
EN

Stack Overflow用户
提问于 2013-08-26 15:14:59
回答 1查看 378关注 0票数 3

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

代码语言:javascript
复制
#define MYVAR (1)

正如您所看到的,这是符合C中的良好实践,方法是用括号包围#define (尽管我知道在本例中它没有什么区别,因为这个值不是表达式)。不管怎么说,我想用这个来做绞线。当我这么做时:

代码语言:javascript
复制
#define STRINGIFY(x) #x
#define TO_STRING(x) STRINGIFY(x)

const char* mystring = TO_STRING(MYVAR) ;

得到的字符串是"(1)“。我想去掉括号,而不用做简单操作:

代码语言:javascript
复制
#define MYVAR 1

在c中的字符串化过程中是否有省略括号?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-26 17:24:42

只需使用STRINGIFY x而不是STRINGIFY(x)

代码语言:javascript
复制
#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,则会出现编译时错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18447423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档