关于从加自减

关于自加自减
#include<stdio.h>
main()
{
   int m,n;
   m = 1;
   n = ++m + ++m;
printf("%d %d",m,n);
}
发现此时m是3,n是6.这是说明++m的话是m先自加2次再参与对n的计算么?
同理我试了
#include<stdio.h>
main()
{
   int m,n;
   m = 1;
   n = m++ +m++;
printf("%d %d",m,n);
}

结果是m=3,n=2.
而且我发现奇葩的空格效果...
就是 空格如果不加 或者乱加的话效果不一样。比如像
#include<stdio.h>
main()
{
   int m,n;
   m = 1;
   n = m+ ++m++;
printf("%d %d",m,n);
}

就显示错误。
求各位大神解释下自加自减在这个程序中对n的影响和自加自减本身的效果...谢了!
------解决方案--------------------
token的解析是“贪婪”来着。
另外副作用不明确的语句就不要深究了。

------解决方案--------------------
楼主去看看置顶贴http://bbs.****.net/topics/370153775
------解决方案--------------------
n = ++m + ++m;

n = m++ +m++;

字表达的求值顺序C/C++标准没有规定,因此结果取决于编译器实现。

第三个为什么编译错误?
++m++;//自增++的优先级一样,所以由结合性决定,而++是右结合的, 因此相当于++(m++),而m++是一个右值表达式,而(前置或后置)++要求操作数是一个左值,因此报错。
(++m)++; //在C++中合法,在C中一样非法。因为在C中,++m也是一个右值表达式,
//但是在C++中,++m是一个左值表达式