2006 08 02 14 26 VC2005 與 VC6 不同之處

最近在試用VC2005,發現有些地方與VC6不同.大部分是使用上的不同.
今天發現了一個編譯上不同的地方.
雖然我早就知道這種寫法會有porting上的問題,
可是沒有想到竟然會是VC2005與VC6之間的差別.

用以下的程式碼測試了一下各種Compiler,以下是結果:
{
int a=0;
a=0;
printf("%sn","printf("%d %dn",++a,a);");
printf("%d %dn",++a,a);
a=0;
printf("%sn","printf("%d %dn",a,++a);");
printf("%d %dn",a,++a);
a=0;
printf("%sn","printf("%d %dn",a,a++);");
printf("%d %dn",a,a++);
a=0;
printf("%sn","printf("%d %dn",a++,a);");
printf("%d %dn",a++,a);
}

VC2005/GCC 4.0.3:
printf("%d %dn",++a,a);
1 1
printf("%d %dn",a,++a);
1 1
printf("%d %dn",a,a++);
1 0
printf("%d %dn",a++,a);
0 1

VC6:
printf("%d %dn",++a,a);
1 0
printf("%d %dn",a,++a);
1 1
printf("%d %dn",a,a++);
0 0
printf("%d %dn",a++,a);
0 0

GCC 3.3.5 3.2.2
printf("%d %dn",++a,a);
1 0
printf("%d %dn",a,++a);
1 1
printf("%d %dn",a,a++);
1 0
printf("%d %dn",a++,a);
0 0

問題是出在 i++ 是什麼時候做,
似乎每個版本的compiler都有不同的解釋。

看樣子,以後還是不要把++寫在function的參數裏,比較安全~~~