0

ISO:IEC 9899:TC3 6.7.5.2 Array declarators -> 10 EXAMPLE 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 Microsoft コンパイラはありません。しかし、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 標準を尊重する最初の Microsoft コンパイラとして発表されたコンパイラとしては、これは非常に奇妙なエラーですよね。それとも、可変長配列の使い方が間違っていて、間違った構文を使用しているだけですか?

4

1 に答える 1