在c语言下,关于自加运算符的问题

int a=1, b;
b=(a++)+2+a;

求b的值?是4还是5?
请问是先把整个第二条语句运算完后,a再加1,还是执行完a+2后,a就加1?

1+2+2=5;
a++和++a的区别在于谁在前

b=(a++)+2+a;
这行代码执行顺序是
b = a;
a++;
b = b+2+a;
所以是 b= 1+2+2=5;

程序是按照步骤来的,如果是a++的话,在那一行代码中,a的值是不变的,下一行才发生变化,++a则是在那一行已经发生了变化。
所以执行的顺序是
b=a=1
a++ //此时a的值变为2
b=b+2+a=5

用VC++6.0实测最终结果为4。
a++,先引用,再自加,
b=1 + 2 + 1;
接着a++;
图片说明
如果将后面的a也改成(a++),结果依然是4.
看下面例子:
图片说明
先执行两次a++;
在用a的值替换表达式中的a
即b=5+5+2
这应该属于未定义行为,就是根据编译器的不同,结果可能不同(我用的是VC++6.0 ,你可以使用VS实测一下)
http://www.guokr.com/blog/471312/
所以尽可能的避免这种容易引起混乱的写法

标准的未定义行为----------------------字数补全大法

若是a++,就是计算分号式值,完了再a++,所以b=4后a=3