[LUGAr-gral] Re: Que pasa con el sizeof() ???

Miguel Cárdenas icqdevel en yahoo.com
Lun Ene 22 10:07:42 CST 2001


Holas!!

> > tambien... lo pueden encontrarn en "Variable Attributes"... Por cierto,
> No es estandard del lenguaje C, te aconsejaria que sigas probando en
> pasarle opciones command line al compilador.

Bueno la unica opcion que venia documentada era -fpack-struct la cual no tenia
efecto alguno en el ejecutable resultante... pero bueno, igual no es estandar
de lenguaje C, pero se puede utilizar gcc como compilador para diferentes
plataformas, ahora solo tengo que ver si esa opcion esta disponible en todas
las versiones de gcc. Como sea por el momento solo esta planeada version de
windows y linux...

> Por otra parte, estas haciendo algo mal, cuando vas a mandar una
> estructura
> de datos por red, no tenes que directamente copiar la estructura con un
> memcpy o algo asi, (para esto vos queres el sizeof) y mandarla, ya que en
> una version posterior de tu programa, la estructura en memoria podria
> cambiar, agregarle mas campos, etc, no asi el protocolo!!!, y mas important
> aun, si seguis mandandole por red la estructura asi como esta en memoria, vas a
> tener quilombos cuando portas tu programa a maquinas que tienen un size de los
> tipos diferentes (ej, una maquina 64bits tiene un int de 64bits), algo que no 
> es tan comun, lo que si es comun que lo portes a una maquina que tenga diferente
> byte order (little endian o big endian), lo que tenes que hacer para dejar tu
> codigo portable y "lindo" (the right way) es:

Bueno como mencionaba, por el momento solo habra version para windows y linux
(igual alguna variedad de unix tambien)... todos esos problemas estan
contemplados, ya que la longitud de los tipos de datos esta muy bien
especificada redeclarando los tipos de datos basicos byte, word y dword...
respecto al byte ordering lo resolvi con un macro que genera los words y dwords
a partir de bytes sueltos, ademas de que asi es mas legible el codigo puesto
que los comandos y parametros para el icq estan documentados como bytes
consecutivos y no como words o dwords...

> 1- Definir el protocolo (aca ya lo tenes definido, es el del icq client)
> 2- Cuando vas a armar el paquete para enviar, agarras tu struct y vas
> campo por campo metiendo los valores tal como especifica el protocolo adentro
> del paquete.

De hecho asi me gustaria, pero aqui tengo un pequeño problema, este programa de
icq es solo modulo de un proyecto mas grande, voy programando hecho la madre,
haciendo pruebas de cada modulo que se agrega, y compilando el software en mi
linux y en windows por lo cual el codigo lo he tenido que hacer lo
suficientemente portable para no tener que reprogramar nada... ahora respecto a
las estructuras de icq pues son bastantes y totalmente diferentes entre si,
armarlas a mano me llevaria semanas, y tomando en cuenta que estoy creando
aproximadamente 1 modulo por semana o semana y media no puedo darme el lujo de
atorarme tanto tiempo... y bueno la mas importante, yo solo me he aventado el
proyecto completo, y si me pongo los moños ajustandome a cada sistema pues no
terminare nunca, me ha sido mas facil ajustar los sistemas al proyecto y
ajustarme yo cuando me es posible...

Saludos!!!

-- 

						 Miguel Cárdenas
						--------------------
						mcmail_y2k en yahoo.com


---------------------------------------------------------
para salir de la lista, enviar un mensaje con las palabras
"unsubscribe ayuda" en el cuerpo a majordomo en linux.org.mx



Más información sobre la lista de distribución Ayuda