int n=10;
int arr[n];
このコードは私の GCC コンパイラで問題なく動作します。静的配列のサイズはコンパイル時に割り当てられませんか? このコードはエラーを生成するべきではありませんか?
int n=10;
int arr[n];
このコードは私の GCC コンパイラで問題なく動作します。静的配列のサイズはコンパイル時に割り当てられませんか? このコードはエラーを生成するべきではありませんか?
可変長配列はC99
機能 ( ではオプションC11
) であり、モードでない場合は拡張gcc
としてこれをサポートします。これを確認する簡単な方法の 1 つは、次を使用することです。c99
gcc
gcc -std=c89 -pedantic
次の警告が表示されます。
warning: ISO C90 forbids variable length array ‘arr’ [-Wvla]
ただし、を使用してビルドするgcc -std=c99 -pedantic
と、警告は表示されません。C99 ドラフト標準セクション6.7.5.2
Array declarators パラグラフ 4から:
[...] サイズが整数定数式で、要素の型に既知の定数サイズがある場合、配列型は可変長配列型ではありません。それ以外の場合、配列タイプは可変長配列タイプです。