msvc很多地方比gcc弱

lt發表於2016-11-20

1.陣列長度短
同樣的程式碼 在g++中執行正常,在msvc中就執行出錯,把17換成16則可以執行。

#include <cstdio>
int main()
{
int a[2<<17]={1};
printf("%d,size%d\n",a[0],sizeof(a));
return 0;
}

如果給陣列加上static修飾符,則可以執行,但是exe檔案變大。如果改成2<<28,則報以下錯。

D:\>cl ms_array.cpp
用於 x86 的 Microsoft (R) C/C++ 優化編譯器 17.00.51106.1 版版權所有(C) Microsoft Corporation。保留所有權利。

ms_array.cpp
ms_array.cpp(4) : error C2148: 陣列的總大小不得超過 0x7fffffff 位元組
ms_array.cpp(5) : error C2070: “int [536870912]”: 非法的 sizeof 運算元

2.缺少數學函式
比如round log2 logb都沒有

3.編譯出的程式執行速度慢

D:\>clang++  p14a1.cpp -O2

D:\>a |gnomon -i
   0.8561s   maxstep=950 ,at 63728127

     Total   0.9381s

D:\>g++  p14a1.cpp -O2

D:\>a |gnomon -i
   2.1035s   maxstep=950 ,at 63728127

     Total   2.1047s

D:\>vc153

D:\>call "C:\Program Files\Microsoft Visual S

D:\>cl  p14a1.cpp -O2 -nologo
p14a1.cpp
C:\Program Files\Microsoft Visual Studio 14.0
時終止。指定 /EHsc

D:\>p14a1 |gnomon -i
   5.7268s   maxstep=950 ,at 63728127

     Total   5.7280s

相關文章