首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中一元加号(+)运算符的用途是什么?

问在C中一元加号(+)运算符的用途是什么?
EN

Stack Overflow用户
提问于 2011-07-10 03:30:56
回答 8查看 23.3K关注 0票数 85

在C语言中,可以合法地编写如下代码:

代码语言:javascript
复制
int foo = +4;

然而,据我所知,+4中的一元加号(+)是没有意义的。是吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-07-10 03:38:57

根据6.3.3.3中的C90标准:

一元+运算符的结果是其操作数的值。在操作数上执行积分提升。并且结果具有提升类型。

和

一元+或-运算符的操作数应为算术类型..

票数 35
EN

Stack Overflow用户

发布于 2011-07-10 03:36:13

您可以将其用作表达式具有算术类型的一种断言:

代码语言:javascript
复制
#define CHECK_ARITHMETIC(x) (+(x))

如果x的计算结果为(比方说)一个指针,这将生成一个编译时错误。

这大概是我能想到的唯一实际用途了。

票数 79
EN

Stack Overflow用户

发布于 2011-07-10 04:58:49

据我所知,一元加号运算符有一个非常方便的用法:在宏中。假设你想做一些类似这样的事情

代码语言:javascript
复制
#if FOO > 0

如果FOO未定义,在这种情况下,C语言要求将其替换为0。但是如果FOO的定义是空的,那么上面的指令将导致错误。相反,您可以使用:

代码语言:javascript
复制
#if FOO+0 > 0

现在,无论FOO是未定义的、定义为空的还是定义为整数值的,指令在语法上都是正确的。

当然,这是否会产生所需的语义是一个完全不同的问题,但在某些有用的情况下,它会。

编辑:请注意,您甚至可以使用它来区分FOO定义为零与定义为空的情况,如下所示:

代码语言:javascript
复制
#if 2*FOO+1 == 1
/* FOO is 0 */
#else
/* FOO is blank */
#endif
票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6637005

复制
相关文章

相似问题

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