c语言printf("%d", ++a + ++a);

    #include <stdio.h>
    int main()
    {
        int a = 1, b = 1, d = 1;
        printf("%d", ++a + ++a);
                return 0;
    }
        结果为6
        不同编译器会给出不同值,是随便给的还是怎么样,“++a + ++a”怎么运算啊

不同编译器会给出不同值,这很正常,这是C语言的未定义行为
http://blog.csdn.net/chencheng126/article/details/47406597
https://www.zhihu.com/question/38737076

如果把C语言的规范当作说明书,那么未定义行为好比超过说明书设计用途的后果。比如说你的说明书说,你的手机型号可以在0~40摄氏度工作,如果在这个温度范围内,合格的这个型号的手机都可以正常使用。那么如果你在-10度下,手机会如何,就不确定了,可能有的不能开机,有的开机很快显示没电,有的可能结霜短路等等。手机厂商不测试也不保证会出现什么情况,这就是未定义行为。

不同的编译器可能会拆分成不同的表达式。例如(++a)+(++a)或者((++a)++)+a之类的,其结果自然也会有所不同了。

++a是a先自加1在再执行后面的操作,++a的优先级高于加减运算符,所以这里相当于是a自加了两次再做加运算,此时a等于3,输出就是3+3啦