++a,a++的纳闷

++a,a++的困惑
各位大虾,小弟菜鸟,今天自己写一个程序时发现了一个问题,自己搞不明白,特此求助!
代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
int a=10,b=10;

printf("%d--",++a);
printf("%d--",a++);
printf("%d\n",a);
printf("%d--%d--%d\n",++b,b++,b);

return 0;

}
得到的结果:
11--11--12
12--10--12
求解释,分不多,拜谢!

------解决方案--------------------
前两个搞清楚就可以了
printf("%d--%d--%d\n",++b,b++,b);
属于未定义行为,结果未知
------解决方案--------------------
printf("%d--%d--%d\n",++b,b++,b);

注意printf的参数处理顺序问题
语言标准并没有进行规定

所以呢,不要去预测编译器的行为
因为那是编译器的自由

这种写代码的方式,是不符合代码规范的
------解决方案--------------------
补充一下,printf()函数是从右往左计算表达式的,但输出时是从左到右输出