2011-12-02 10 views
5

私は友人と話をしていて、コードで彼女を助けていました。そして、私はいつもスタックがコンパイル時のようにコンパイル時の定数である必要があると思っていました。しかし、彼女は友人がこのコードを使ってこれをしたと言った:実行時にサイズが決定された配列は、C++で有効ですか?

#include <iostream.h> 
#include <stdlib.h> 
int main() 
{ 
    int value = ' ' ; 
    int sum = 0; 
    int count = 0; 
    cout<<"Please enter the total number of employees" <<endl;; 
    cin>> value; 
    int numbers[value]; 
    cout<<"Now enter the employees corresponding salaries" <<endl;; 
    for (int k = 0; k < value; k++) 
    { 
     cin >> numbers[k]; 
    } 
} 

彼らはDev-C++を使用しています。

このコードは動作するものですか?私はそうではないと思う。

+0

可能な複製[C++で可変長配列をグローバルにする方法はありますか?](http://stackoverflow.com/questions/3903232/is-there-any-way-to-make-a-variable -length-array-global-in-c) –

+1

彼女が 'value 'を' '' 'に初期化する理由はありますか?コンパイラは気にしません( '' 'charをASCII値の' 32 'にキャストします)が、intを初期化するために32は奇数、乱数のように見えます。 –

+0

彼らはコーダーではなく、一般の大学生だけです。私はなぜ彼女が ''を選ぶのかは分からなかった。 – jValdron

答えて

9

可変長配列はgccとという拡張子です...これはすべてのコンパイラでは機能しません。

可変長配列のgccのサポートの詳細については、documentation hereを参照してください。

4

可変長配列はC++では正式にはサポートされていませんが、特定のコンパイラや言語拡張で実装されていると思います。

可変長配列が必要な場合は、std :: vectorを使用することをお勧めします。 あなたがここにそのリファレンスを表示することができます。

http://www.cplusplus.com/reference/stl/vector/

2
#include <iostream.h> 

^標準ヘッダーではありません。これは以前の標準時、すなわち1998年以前に存在していました。現代のVisual C++。

cin>> value; 
int numbers[value]; 

可変長配列すなわちVLAは、C++が標準化されてから1年後のC99に導入されました。したがって、それらはオリジナルの標準C++の一部ではなく、うれしくC++ 11でも採用されていませんでした。そのような獣の代わりに、 vectorヘッダのstd::vector、またはその他の標準ライブラリコンテナです。

g ++は、可変長配列を言語拡張子としてサポートしています。あなたはそのような拡張機能を無効にするほうがよいでしょう。たとえば、

0

GCC 4.6を使用してコンパイルしようとしましたが、投稿したコードが正常にコンパイルされています。私もそれを実行しようとしたと働いたが、私はコードが非常に良いとは思わない。

関連する問題