2011-12-02 8 views
5

Así que estaba hablando con mi amigo, ayudándola con un código, y siempre pensé que las matrices debían ser constantes en tiempo de compilación, ya que están en la pila. Pero ella dijo que su amigo hizo esto usando este código:Las matrices con un tamaño determinado en tiempo de ejecución, ¿esto es válido en 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]; 
    } 
} 

Están usando Dev-C++.

¿Se supone que este código funciona? Supongo que no.

+0

posible duplicado de [¿Hay alguna manera de hacer que una matriz de longitud variable sea global en C++?] (Http://stackoverflow.com/questions/3903232/is-there-any-way-to-make-a-variable -length-array-global-in-c) –

+1

¿Hay alguna razón para que esté inicializando 'value' en' '' '? Al compilador no le importará (arrojará el caracter '''' a su valor ASCII, '32'), pero 32 parece un número impar, aleatorio para inicializar un int. –

+0

No son codificadores, solo estudiantes universitarios generales. No podría decirte por qué eligió '', \ n hubiera estado bien. – jValdron

Respuesta

9

Los arreglos de longitud variable son una extensión en gcc y g++ ... así que esto no funcionará en todos los compiladores.

Para obtener más información sobre el soporte de gcc para matrices de longitud variable, puede ver el documentation here.

4

Creo que los arreglos de longitud variable oficialmente no están soportados en C++, pero ciertos compiladores y/o extensiones de lenguaje los implementan.

Si desea una matriz de longitud variable, le recomiendo usar std :: vector. Puede ver su referencia aquí:

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

2
#include <iostream.h> 

^no es un encabezado estándar. Solía ​​estar allí en tiempos preestandarizados, es decir, antes de 1998. No está allí, por ej. Visual C++ moderno.

cin>> value; 
int numbers[value]; 

matrices de longitud variable o Vlas, se introdujeron en el C99, un año después de C++ fue estandarizado. Entonces no formaban parte del C++ estándar original, y felizmente tampoco fueron adoptados en C++ 11. En lugar de tal bestia, use, p. std::vector del encabezado vector, o algún otro contenedor de biblioteca estándar.

g ++ admite matrices de longitud variable como una extensión de lenguaje . Es mejor que apagues esa extensión. Por ejemplo,

 
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

he intentado compilar usando GCC 4.6, y encontraron que el código que has publicado compilado con éxito. También intenté ejecutarlo y encontré que funcionó, pero no creo que el código sea muy bueno.

Cuestiones relacionadas