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的參數裏,比較安全~~~