2011-12-02 9 views
5

Quindi stavo parlando con il mio amico, aiutandola con un pezzo di codice, e ho sempre pensato che gli array dovessero essere costanti in fase di compilazione, dato che sono in pila. Ma lei ha detto che la sua amica ha fatto questo usando questo codice:Array con una dimensione determinata in fase di esecuzione, è valido in 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]; 
    } 
} 

Stanno usando Dev-C++.

È possibile che questo codice funzioni? Presumo di no.

+0

possibile duplicato di [C'è un modo per rendere globale una matrice di lunghezza variabile in C++?] (Http://stackoverflow.com/questions/3903232/is-there-any-way-to-make-a-variable -length-array-global-in-c) –

+1

C'è qualche ragione per cui sta inizializzando 'value' a' '' '? Il compilatore non si preoccuperà (lanci il '' ''char al suo valore ASCII,' 32'), ma 32 sembra un numero casuale e dispari per inizializzare un int a. –

+0

Non sono programmatori, solo universitari generici. Non potrei dirti perché ha scelto '', \ n sarebbe andato bene. – jValdron

risposta

9

Gli array di lunghezza variabile sono un'estensione in gcc e g++ ... quindi questo non funzionerà in ogni compilatore.

Per ulteriori informazioni sul supporto gcc per gli array di lunghezza variabile, è possibile vedere documentation here.

4

Credo che gli array di lunghezza variabile non siano ufficialmente supportati in C++, ma alcuni compilatori e/o estensioni di linguaggio li implementano.

Se si desidera un array di lunghezza variabile, si consiglia di utilizzare std :: vector. È possibile visualizzare il suo riferimento qui:

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

2
#include <iostream.h> 

^non è un colpo di testa di serie. Un tempo esisteva in tempi pre-standard, vale a dire prima del 1998. Non è presente ad es. Visual C++ moderno.

cin>> value; 
int numbers[value]; 

Array lunghezza variabile, o Vlas, sono stati introdotti in C99, un anno dopo che C++ è stato standardizzato. Quindi non facevano parte dello standard C++ originale e, fortunatamente, non erano nemmeno adottati in C++ 11. Invece di una tale bestia, usa per es. std::vector dall'intestazione vector o da un altro contenitore di libreria standard.

g ++ supporta matrici di lunghezza variabile come estensione linguaggio. Faresti meglio a spegnere tale estensione. Ad esempio,

 
d:\dev\test> g++ foo.cpp 

d:\dev\test> g++ -pedantic -std=c++0x -Wall -O foo.cpp 
foo.cpp: In function 'int main()': 
foo.cpp:11: warning: ISO C++ forbids variable length array 'numbers' 
foo.cpp:7: warning: unused variable 'sum' 
foo.cpp:8: warning: unused variable 'count' 

d:\dev\test> _ 
0

Ho provato a compilarlo utilizzando GCC 4.6 e ho rilevato che il codice che hai pubblicato è stato compilato correttamente. Ho anche provato a farlo funzionare e ho scoperto che funzionava, ma non penso che il codice sia molto buono.

Problemi correlati