可变长度阵列;另一个构造MSVC无法编译?

时间:2013-09-23 10:07:40

标签: c visual-studio visual-studio-2010

读完ISO:IEC 9899:TC3 6.7.5.2数组声明符 - > 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上编译此代码时....当然它无法编译。 我们知道没有任何真正的C microsoft编译器到MSVC2013。 但是我安装了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标准的微软编译器,不是吗?或者我只是错误地使用可变长度数组并使用错误的语法?

1 个答案:

答案 0 :(得分:2)

如果您阅读了MSVC文档(可能会发生变化),则表明MSVC 2013 conforms to C90reference for declarations未提及VLA。还有一个roadmap for MSVC表示他们正在采用C99的战术元素,因此不一定支持完整的标准。

因此,在MSVC 2013中,VLA似乎仍然不是C99支持子集的一部分。