表达式“+ + a”是什么意思?

时间:2013-09-23 21:01:36

标签: c

+ +之间有空格时,表达式“+ + a”的含义是什么。这个表达式是如何评估的?

    int main()
    {
        int a = 3;

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

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

3 个答案:

答案 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相反 换句话说,-aa的符号相反,+a只是重新确认a的现有正号/负号。

然后又有一个外部正面,仍然导致3。

相反的版本是:

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

哪个是“负面否定3”......这又是+3