当+ +
之间有空格时,表达式“+ + a
”的含义是什么。这个表达式是如何评估的?
int main()
{
int a = 3;
printf("%d %d", + +a, a);
}
以及a+++a
如何评估?
是未定义还是未指定或实现定义?
答案 0 :(得分:8)
这是一个无操作 - 两次因为+ a
是无操作而且重复了。
a+++a
被明确地解析为a++ + a
,但在执行时会导致未定义的行为。
请注意,如果代码集a = -3;
,则打印的值仍为-3
两次。
答案 1 :(得分:4)
如果++
运算符中间有空格,那么您只需应用一次加运算符两次。
关于表达式a+++a
,
C规范说,当存在这种模糊性时,尽可能地咀嚼(
“贪婪的词法”或“最大的蒙克”规则)。因此a+++a
被评估为a++ + a
根据该规则,表达式为z = y+++++x;
将被解析为z = y++ ++ +x;
,这是无效的(后增量的结果本身不可递增)。
答案 2 :(得分:1)
+a
正好与-a
相反
换句话说,-a
与a
的符号相反,+a
只是重新确认a
的现有正号/负号。
然后又有一个外部正面,仍然导致3。
相反的版本是:
printf("%d %d",- -a,a);
哪个是“负面否定3”......这又是+3
。