在C语言中,可以合法地编写如下代码:
int foo = +4;然而,据我所知,+4中的一元加号(+)是没有意义的。是吗?
发布于 2011-07-10 03:38:57
根据6.3.3.3中的C90标准:
一元+运算符的结果是其操作数的值。在操作数上执行积分提升。并且结果具有提升类型。
和
一元+或-运算符的操作数应为算术类型..
发布于 2011-07-10 03:36:13
您可以将其用作表达式具有算术类型的一种断言:
#define CHECK_ARITHMETIC(x) (+(x))如果x的计算结果为(比方说)一个指针,这将生成一个编译时错误。
这大概是我能想到的唯一实际用途了。
发布于 2011-07-10 04:58:49
据我所知,一元加号运算符有一个非常方便的用法:在宏中。假设你想做一些类似这样的事情
#if FOO > 0如果FOO未定义,在这种情况下,C语言要求将其替换为0。但是如果FOO的定义是空的,那么上面的指令将导致错误。相反,您可以使用:
#if FOO+0 > 0现在,无论FOO是未定义的、定义为空的还是定义为整数值的,指令在语法上都是正确的。
当然,这是否会产生所需的语义是一个完全不同的问题,但在某些有用的情况下,它会。
编辑:请注意,您甚至可以使用它来区分FOO定义为零与定义为空的情况,如下所示:
#if 2*FOO+1 == 1
/* FOO is 0 */
#else
/* FOO is blank */
#endifhttps://stackoverflow.com/questions/6637005
复制相似问题