Sizeof para tipos definidos

Started by HaCkZJuaNN, February 21, 2009, 05:49:00 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

HaCkZJuaNN

Los que me conozcan ya sabrán que soy el mayor amante de los tipos definidos.

Bien, me disponía a usar por primera vez las matrices dinámicas en bennu, y he descubierto que sí que se puede hacer sizeof(int) pero no sizeof(tipodefinido). He comprobado que el size de un tipo definido es el mismo sea cual sea la variable concreta, sólo depende del tipo que sea, y que además se corresponde a la suma de las variables que abarca, esto es, si tiene 2 ints, sizeof(tipodefinido) = 2*sizeof(int).

Es decir, no es un problema ni lo va a ser pase lo que pase, pero creo que se podría ampliar el alcance de sizeof para que también acepte tipos definidos(el nombre) como parámetro, sin tener que utilizar una variable de prueba.

Un saludo.

EDIT: Vale, ahora sí es un problema. No se pueden hacer matrices dinámicas de tipos definidos??? No me deja hacer alloc.
EDIT2: No he dicho nada en el EDIT xD, es que soy tontito, ya está solucionado.

SplinterGU

creo que estas equivocado


import "mod_say";

type type1
    int a;
    int b;
    char c;
end


private
    type1 t;

begin

    say (sizeof(type1));
    say (sizeof(t));
end


da esto


splinter@splinter:~/Bennu$ bgdi sizeof
9
9


con respecto al alloc, ok...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

HaCkZJuaNN

Ok, la cagué integralmente, ya sé qué hice mal. Perdón xD

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Reflote.

Quiero hacer el sizeof de un array de strings, pero no me devuelve el numero de chars que tiene, como tengo que hacer ?
Gracias, y perdonad, que no conteste pero estoy de vacas y vendré sólo en ocasiones :)

SplinterGU

como ya te comente, no puedes copiar arrays de strings con un memcpy, asi que hacer un sizeof no te sirve de nada, sin descontar que un array de chars es lo mismo que un array de enteros; quizas deberia comentar (aunque muchos ya lo sepan) que un array de strings no se dimensiona por el tamaño de las strings, ya que ningun array puede tener dimensiones de diferente tamaño en sus elementos de una misma dimension, ya que cada vez que cambiaria de tamaño, significaria recalcular y reubicar todo el array.
si la explicacion anterior es un poco complicada, la respuesta simple y resumida es, no se puede hacer sizeof de un array de strings esperando obtener como resultado la suma del strlen de todas las strings, un elemento string no guarda realmente la string, sino un identificador numerico que referencia a la string.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Pues como podria sumar sus chars para obtener su dimensión ? Con algo que la recorra y me diga el total me vale....

SplinterGU

un for con strlen... para que lo queres si puede preguntar?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Pues si, ayer me fije que justo hacia eso en otra parte  ::)
Lo quiero para definir el tamaño del fondo del texto segun su dimension, ya que quiero hacer globos de dialogos  :D

SplinterGU

ahh, para eso deberias usar text_width y text_height
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Gracias, ya veo que hay facil solución :)

SplinterGU

Quote from: FreeYourMind on December 28, 2010, 12:46:06 PM
Gracias, ya veo que hay facil solución :)

con la pregunta correcta siempre hay solucion...

estas funciones no te van a calcular el tamaño del array, pero si te van a calcular el tamaño en pantalla de una string con un font determinado, con lo que te permitiria dibujar un globo del tamaño necesario.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2