Al tratar de explicar a alguien por qué una matriz estática de C++ no podría por tamaño dinámico, encontré gcc en desacuerdo conmigo. ¿Cómo se compila el siguiente código, dado que la dimensión argc de matriz no se conoce en tiempo de compilación?C++ rompecabezas de matriz estática de tamaño dinámico
#include <iostream>
int main(int argc, char* argv[]) {
int array[argc];
for(int i = 0; i < argc; i++) array[i] = argv[i][0];
for(int i = 0; i < argc; i++) std::cout << i << ": " << char(array[i]) << std::endl;
//for(int i = 0; i < 100; i++) { std::cout << i << " "; std::cout.flush(); array[i] = 0; }
return 0;
}
He probado esto con gcc 4.2.1, y que se especifica -Wall, sin conseguir siquiera una mirada sucia del compilador. Si elimino el último ciclo, obtengo una segfault cuando lo asigno a array [53].
había colocado previamente matrices de guardia antes y después de la declaración de gama, y les había llenado con ceros, seguro de que el programa debe ser destrozando parte de su pila, pero gcc reordenado las variables en la pila, de manera que No pude observar ninguna corrupción de datos.
Obviamente, no estoy tratando de hacer que este código "funcione". Solo intento entender por qué gcc incluso cree que puede compilar el código. Cualquier sugerencia o explicación sería muy apreciada.
Actualización: ¡Gracias a todos por sus útiles y ridículamente rápidas respuestas!
permitido por c99 pienso: http://bytes.com/topic/c/answers/770297-c99-dynamic-array – Kevin
El otro problema básico es que está utilizando un compilador para probar si algo es posible en un idioma. Puede especificar un estándar en gcc y puede solicitar una conformidad estricta con el estándar ('-pedantic'?), pero no lo ha hecho, y por lo tanto está permitiendo extensiones de compilador. –