5

当中间有空格时+ +,表达“ + + a”是什么意思。这个表达式是如何计算的?

    int main()
    {
        int a = 3;

        printf("%d %d", + +a, a);
    }

以及如何a+++a评估?它是未定义的或未指定的还是已定义的实现?

4

3 回答 3

8

这是一个无操作 - 两次因为+ a是一个无操作并且它被重复。

a+++a被明确解析为a++ + a,但在执行时会导致未定义的行为。

请注意,如果代码设置为a = -3;,则打印的值仍为-3, 两次。

于 2013-09-23T21:04:28.790 回答
4

当运算符中间有空格时++,您只需应用一元加运算符两次。

关于表达式a+++a,C 规范说,当存在这种歧义时,尽可能多地咀嚼(“贪婪词法分析器”或“最大咀嚼”规则)。所以a+++a被评估为a++ + a

根据该规则,像, 这样的表达式z = y+++++x; 将被解析为z = y++ ++ +x;,这是无效的(后增量的结果本身不是可增量的)。

于 2013-09-23T21:10:58.337 回答
1

+a正好相反-a
换句话说, where-a将有相反的符号a+a只是重新确认 的现有正/负符号a

然后又是一个外部正数,仍然是 3。

相反的版本是:

printf("%d %d",- -a,a);

这将是“负负 3”......这又是+3.

于 2013-09-23T21:04:46.853 回答