在我阅读 ISO:IEC 9899:TC3 6.7.5.2 Array declarators -> 10 示例 4 之后。我想知道我以前从未见过具有这种有用构造的代码。
我编写了这个简单的示例代码来测试我是否正确地了解了它的工作原理。
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 标准的微软编译器的编译器来说是相当奇怪的错误,不是吗?或者我只是错误地使用了可变长度数组并使用了错误的语法?