C ++では、あるサイズのグローバル配列を宣言してみました。エラーが発生しました:
バインドされた配列は ']'トークンの前の整数定数ではありません
しかし、main()
関数内で同じ型の配列を宣言すると、うまく機能します。
ここに異なる動作があるのはなぜですか?
int y=5;
int arr[y]; //When I comment this line it works fine
int main()
{
int x=5;
int arr2[x]; // This line doesn't show any error.
}
編集:多くの人が、この質問は「配列の境界が ']'トークンの前の整数定数ではありません」というエラーの複製であると示唆しています。しかし、その質問は、なぜ異なる行動があるのかには答えません。
main
コンパイラが「受け入れる」場合:C ++標準でサポートされていない場合でも、VLAをコンパイルできるようにするコンパイラ拡張機能を使用しています。
y
とx
のようにconst
?y
またはの値を変更する必要がありますかx
?それがどれほど大きいかarr
、そしてあるarr2
べきかについて多くの疑問を投げかけるので、うまくいけないでしょう-特に初期化の順序を反映して。(ヒント:それらは定数でなければなりません)
--std=c++17
(または--std=c++11
古いコンパイラの場合)でプログラムをコンパイルすると、コンパイルは失敗します。
main
、これは合法ではなく、VLA拡張を使用します。