elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Se puede hacer esto ?? .. porque?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Se puede hacer esto ?? .. porque?  (Leído 5,903 veces)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Se puede hacer esto ?? .. porque?
« Respuesta #10 en: 11 Mayo 2013, 05:10 am »

No era que para dimensionar un vector en tiempo de ejecución , se necesitaba reservar memoria dinamica?
Correcto. Una de las formas garantizadas es esa, mediante el par de operadores new y delete. La otra es utilizar la clase vector.

como puede ser que dimensione un vector con una variable.
Esto:
Código
  1. int var;
  2. cin >> var;
  3. int x[var];
En C++ genera algo llamado comportamiento no definido (mejor conocido como UB). Como su nombre lo indica cualquier cosa puede pasar, por ejemplo:

A) Funciona correctamente, no hay problema.
B) El programa revienta.
C) Se generan resultados aleatorios.
D) Cualquier otra cosa.

Y ese es el problema: no hay garantías en cuanto a la ejecución del programa. Yo te recomendaría que revisaras la documentación de tu compilador para conocer que extensiones (al lenguaje) soporta.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Se puede hacer esto ?? .. porque?
« Respuesta #11 en: 11 Mayo 2013, 12:09 pm »

En C++ genera algo llamado comportamiento no definido (mejor conocido como UB). Como su nombre lo indica cualquier cosa puede pasar, por ejemplo:

A) Funciona correctamente, no hay problema.
B) El programa revienta.
C) Se generan resultados aleatorios.
D) Cualquier otra cosa.

Y ese es el problema: no hay garantías en cuanto a la ejecución del programa. Yo te recomendaría que revisaras la documentación de tu compilador para conocer que extensiones (al lenguaje) soporta.
Repito, está definido en el estándar C99 (dije  C98 pero lo acabo de comprobar y era C99):

Citar
Design

C99 is, for the most part, backward compatible with C89 but is stricter in some ways.

In particular, a declaration that lacks a type specifier no longer has int implicitly assumed. The C standards committee decided that it was of more value for compilers to diagnose inadvertent omission of the type specifier than to silently process legacy code that relied on implicit int. In practice, compilers are likely to display a warning, then assume int and continue translating the program.
C99 introduced several new features, many of which had already been implemented as extensions in several compilers:

- inline functions

- intermingled declarations and code: variable declaration is no longer restricted to file scope or the start of a compound statement (block), similar to C++
several new data types, including long long int, optional extended integer types, an explicit boolean data type, and a complex type to represent complex numbers

- variable-length arrays

- support for one-line comments beginning with //, as in BCPL or C++

- new library functions, such as snprintf

- new header files, such as stdbool.h, complex.h, tgmath.h, and inttypes.h

- type-generic math functions
- improved support for IEEE floating point

...
http://en.wikipedia.org/wiki/C99#Design

Y bueno, compiladores no hay muchos. Salvo que utilize uno prehistorico debería funcionar con el mismo Mingw (o g++ en Linux).


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Se puede hacer esto ?? .. porque?
« Respuesta #12 en: 11 Mayo 2013, 16:00 pm »

Esto:
Código
  1. int var;
  2. cin >> var;
  3. int x[var];
En C++ genera algo llamado comportamiento no definido (mejor conocido como UB). Como su nombre lo indica cualquier cosa puede pasar

Repito, está definido en el estándar C99 (dije  C98 pero lo acabo de comprobar y era C99):
http://en.wikipedia.org/wiki/C99#Design

Y bueno, compiladores no hay muchos. Salvo que utilize uno prehistorico debería funcionar con el mismo Mingw (o g++ en Linux).
Los arrays de longitud variable o VLAs se incluyeron en el lenguaje C a partir de ese estándar (C99) pero no forman parte del estandar de C++ (C++98).

Si un compilador de C++ los soporta es como una extensión y lo problemático de estas es su falta de garantías (quien desarrolla el compilador las decide a su criterio).

Una pagina (en ingles) donde se listan las diferencias es Incompatibilities Between ISO C and ISO C++

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Alguien me puede decir porque pasa esto????
Juegos y Consolas
ciceron 5 2,337 Último mensaje 3 Abril 2005, 16:31 pm
por ciceron
alguien puede tener idea de porque falla esto?(socket)
Programación Visual Basic
n3ts4mura1 4 2,016 Último mensaje 19 Agosto 2006, 06:38 am
por n3ts4mura1
Pregunta simple : Porque no puedo hacer esto?
Programación Visual Basic
CAR3S? 2 3,196 Último mensaje 9 Octubre 2011, 17:08 pm
por CAR3S?
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines