0
我讀了ISO之後:IEC 9899:TC3 6.7.5.2數組聲明符 - > 10示例4. 我想知道我以前從來沒有見過這種有用結構的代碼。可變長度數組;另一個構造MSVC不能編譯?
我寫了這個簡單的示例代碼來測試我知道它是如何工作的。
int m = 9;
int foo (int iArray[m], int n);
int main(int argc, char **argv)
{
int iArray[m];
int n = 5;
iArray[n] = 555;
printf ("%d\r\n", foo (iArray, n));
return 0;
}
int foo (int iArray[m], int n)
{
int iLocalArray[n];
iLocalArray[n - 1] = iArray[n];
return iLocalArray[n - 1];
}
當我嘗試在MSVC2010上編譯此代碼....當然,它無法編譯。因爲我們知道MSVC2013以前沒有任何真正的C微軟編譯器。 但是,所以我安裝了MSVC2013RC,並認爲應該運行,因爲他們說MSVC2013包含一個真正的C99編譯器。當我開始編譯,還是同樣的錯誤:
1>[...].c(6): error C2057: expected constant expression
1>[...].c(6): error C2466: cannot allocate an array of constant size 0
1>[...].c(11): error C2057: expected constant expression
1>[...].c(11): error C2466: cannot allocate an array of constant size 0
1>[...].c(11): error C2133: 'iArray' : unknown size
1>[...].c(20): error C2057: expected constant expression
1>[...].c(20): error C2466: cannot allocate an array of constant size 0
1>[...].c(22): error C2057: expected constant expression
1>[...].c(22): error C2466: cannot allocate an array of constant size 0
1>[...].c(22): error C2133: 'iLocalArray' : unknown size
但是,這是其公佈爲第微軟編譯器誰尊重甚至是C99的標準編譯器相當奇怪的錯誤,不是嗎?或者我只是使用變長數組錯誤,並使用錯誤的語法?
啊,所以我很擔心,我只注意到他們參加了'_Bool'抱歉,所以我認爲他們正在升級最終使用c99。可悲的是,情況並非如此。順帶一提,你知道MSVC13允許變量聲明後的變量聲明嗎? – dhein
@Zaibis:根據[文檔](http://msdn.microsoft.com/en-us/library/ce4b8s02%28v=vs.120%29.aspx),不允許使用'如果有聲明,他們必須在任何陳述之前來。「但是我沒有編譯器在這裏測試。 – tinman
剛剛由我自己檢查過。 MSVC2013允許在語句已被調用後進行變量聲明。 – dhein