• Lunes 29 de Abril de 2024, 01:17

Autor Tema:  Enumeraciones  (Leído 1356 veces)

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Enumeraciones
« en: Lunes 26 de Marzo de 2007, 17:18 »
0
Hola, tengo una duda con respecto a las enumeraciones. La primera es con respecto al tamaño en memoria que ocupan. Por ej:

Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. enum week {
  5.   Mon=1}d;
  6.  
  7. int main()
  8. {
  9.   printf("%d bytes\n",sizeof(d));
  10.   printf("%d bytes",d =Mon);
  11.  
  12.   return 0;
  13. }
  14.  
Por mas que agrego mas items siempre ocupan en memoria 4 bytes, que quiere decir eso?
La otra duda que tengo es la forma de acceder al contenido de cada campo de la enum, o sea es como una asignacion, a mi me parecia que la forma mas logica seria en este caso d.Mon, pero no es asi.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Enumeraciones
« Respuesta #1 en: Lunes 26 de Marzo de 2007, 17:24 »
0
Un enum no es una estructura, no podes acceder a ningun campo ya que no lo tiene, con eso estas declarando un enum llamado week y una variable de ese tipo cuyo unico valor valido sera Mon que es en realidad 1, en el codigo se reemplaza siempre por el valor y por esa razon ocupa 4 bytes independientemente de los elementos que le pongas, no son campos.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Enumeraciones
« Respuesta #2 en: Lunes 26 de Marzo de 2007, 17:27 »
0
serian como variables comunes que solo se le pueden asignar ciertos valores ya definidos, no?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Enumeraciones
« Respuesta #3 en: Lunes 26 de Marzo de 2007, 17:31 »
0
Cita de: "AnioN"
serian como variables comunes que solo se le pueden asignar ciertos valores ya definidos, no?
Una variable de ese tipo esta ciertamente obligada a tener como valor uno de los elementos del enum.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Enumeraciones
« Respuesta #4 en: Lunes 26 de Marzo de 2007, 17:37 »
0
por que me deja compilar este codigo?

Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. enum a {
  5. k = 2
  6. };
  7.  
  8. int main()
  9. {
  10.   enum a ss;
  11.  
  12.   ss = 20; /* esta linea */
  13.   printf("%d",ss = k);
  14.   return 0;
  15. }
  16.  
  17.  
O sea, en tiempo de compilacion no tira error, pero en si la asignacion no la hace.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Enumeraciones
« Respuesta #5 en: Lunes 26 de Marzo de 2007, 17:42 »
0
Cita de: "AnioN"
por que me deja compilar este codigo?

O sea, en tiempo de compilacion no tira error, pero en si la asignacion no la hace.
Supongo que sera por tener el compilador que tenes ...

VC++ no te lo compila:
error C2440: '=' : cannot convert from 'int' to 'a'

Internamente se trabaja con valores pero en el codigo no podes hacerlo, es el chiste de los enum's sino usarias valores a mano directamente, el unico valor que le podes asignar a ss es k.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Enumeraciones
« Respuesta #6 en: Lunes 26 de Marzo de 2007, 17:52 »
0
Gracias. :D Lo probe en dos compiladores, Borland C++ 5.5.1, y en el mingw y me dejo compilar en ambos.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Enumeraciones
« Respuesta #7 en: Lunes 26 de Marzo de 2007, 18:18 »
0
Vemos cual es el mejor  :P

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Enumeraciones
« Respuesta #8 en: Lunes 26 de Marzo de 2007, 23:11 »
0
Cita de: "AnioN"
Gracias. :D Lo probe en dos compiladores, Borland C++ 5.5.1, y en el mingw y me dejo compilar en ambos.
MinGW da este error:

Citar
12 invalid conversion from `int' to `a'

Lo probé en la versión 3.4.2 y sin activar ninguna opción de errores/warnings en particular.
La imaginación es el límite.
Hardware & Software | Mexchip