Ver Mensaje Individual
  #6 (permalink)  
Antiguo 11/05/2013, 03:13
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Constantes en C

Es un ejemplo de como me organizo las cabeceras y los datos a usar. En este ejemplo las constantes enumeradas son la forma 'humana' o facil de identificar los datos que hay en un array de datos tambien constantes en una instancia de la aplicacion.

La idea está en que las constantes pueden afectar solo a determinadas partes de la aplicacion (una ventana de configuracion, un visor, etc lo que sea) y ademas pueden ser personalizables (si por ejemplo tengo un visor con una constante que simboliza el nivel de detalle, puedo dejar que sea personalizable o no, si no es personalizable pongo un #define y listos, pero si es personalizable debo guardarla en una variable). Por eso tal vez no sean constantes para toda la aplicacion pero si para determinadas partes de ella: puedo iniciarlas con un valor por defecto (por si falla algo) pero durante la carga les asigno el valor (las relleno con los valores personalizados previamente guardados).

En el caso del enum el valor en si de cada cosa no es importante (por eso lo comento en la parte de que no me importa el valor que tengan), lo importante es que esten relacionados con los datos de otra lista (que tambien puede ser constante).

Hasta aqui ok, pero para que complicarlo tanto? Puedes pensar que en el ejemplo con solo 3 const int ya lo tengo solucionado y aun queda mas facil. El problema esta cuando tienes mas de 3 constantes, y si ademas son personalizables tendras que guardarlas en algun sitio y (aunque pueda hacerse) no vas a cargarlas una por una, y menos aun si te las descargas como pack de enteros de algun servidor. Esto te permite serializar el trabajo.

El ejemplo que colgué es la idea de como estaba maquetado un codigo que hice (no se cuando) para una GUI para Allegro. En los objetos de esa gui no solo tenia una lista de 3 atributos, sino que habia nosecuantos para cada uno (colores de: fondo / letra / borde / fondo con foco / letra con foco / borde con foco, tamaños de letra / borde, margenes, etc no me acuerdo que mas tenia). En ese caso no voy a crear una lista de 15 const int constantes para cada objeto y que sean variables para cada instancia del objeto, ok? Esas listas de enteros podian ser cargadas directamente de un archivo de configuracion, es decir, que se carga todo un paquete de enteros y como puedes imaginar no voy a ir desgranando cada elemento para asignarlo a un consta char que tengo por ahi, sino que lo guardo en un array de enteros y del cual se la funcion de cada elemento por la enumeracion.


"... pero con lo de attributes quede colgado..."

Solo lo puse a modo de ejempo, podria haber rescatado trozos de codigo de otras aplicaciones y el nombre tampoco tendria sentido; ademas parece que tampoco tiene sentido tanto codigo solo para 3 elementos, puse solo 3 para simplificar y los rellené manualmente para que se vea lo que quiero hacer.

La funcionalidad es esta: imagina que cargas una lista de enteros de un archivo y esos enteros son los atributos de un objeto (o aunque no la cargues de un archivo sino que la tengas en una cabecera de datos constantes para la aplicacion), tienes una lista de atributos con datos pero no sabes en que orden, o si lo sabes pero no vas a acceder a ellos directamente con los indices (se supone que por dentro de los codigos no tiene que haber datos hardcoded), es decir que si quieres recuperar el color de la lista de atributos no usaras 'atributos[0]' aun sabiendo que bajo el indice 0 esta el valor del color sino que usaras 'atributos[INDICE_COLOR]'.

No era mi intencion liarla tanto :)
Saludos
vosk