2016-11-04 4 views
2

私の大学のスクリプトでは、実行時にローカルな配列を作成することは許可されていないと書かれています。実行時に認識されるサイズの配列を作成できるのはなぜですか?

float x [size] [2];
宣言された配列は実行時サイズを持つことができないため、これは機能しません。ベクトルを試してみてください:

から:C++ expected constant expression

しかし、このコードは編集

#include <iostream> 

int main(){ 
    int i = 5; 

    int x; 
    std::cin >> x; 

    int array[x]; 

    for(int i = 0; i<x; ++i){ 
     std::cout << array[i] << "\n"; 
    } 

} 

8.0.0のApple LLVMの下でコンパイルされます。そして、正常に動作します。ガベージを期待どおりに印刷します。

注意:このプログラムは意味をなすものではありません。

+1

これは非標準のコンパイラ拡張です。 '-pedantic-errors'でコンパイルすると、それを拒否すべきです。 – Galik

答えて

2

この機能は「可変長配列」と呼ばれ、コンパイラの拡張機能です。それは標準の一部ではありません。

あなたは-pedanticでコンパイルする場合は、クランはあなたにこの警告を与える:あなたが移植できるようにあなたのコードが必要な場合は

main.cpp:9:14: warning: variable length arrays are a C99 feature [-Wvla-extension] 
    int array[x]; 

は、この機能を使用しないでください。

+0

*コンパイラ拡張*、またはC99標準*の一部ですか?私は手元に標準を持っていないし、Clangの警告のようなものは答えの本体と矛盾する。 @Kroltanの両方。 – Kroltan

+0

これはC++コードのコンパイラ拡張であり、C99で有効です。 – TartanLlama

関連する問題