OK, no es mi intencion desacreditarte, solo quiero, aclarar que algoritmo de instru es incorrecto, me gustaría que alguien mas lo pruebe, con diferentes campos de la estructura, para ver si estoy o no equivocado.
me gustaria que TolaWare(o cualquiera que este dispuesto)lo comprueve para salir de este dilema. claro si es que quiere hacerlo:
el programa con el algoritmo de Instru es este:
(quien quiera probarlo y poner sus obserbaciones:)
Código:
#include <stdio.h>
struct Ficha {
char * Nombre;
unsigned int Edad;
char * Pais;
char * Ciudad;
char * Calle;
unsigned char Piso;
unsigned char Letra;
};
#define devuelve_estructura(puntero_miembro,nombre_estructura,nombre_miembro) \
(nombre_estructura *)(puntero_miembro-(long)(&((nombre_estructura *)0)->nombre_miembro));
int main()
{
struct Ficha miFicha;
struct Ficha * nuevaFicha;
nuevaFicha = devuelve_estructura(&miFicha.Edad, struct Ficha, Edad);
// nuevaficha = devuelve_estructura(&miFicha.Piso,struct Ficha, Piso);
// nuevaficha = devuelve_estructura(&miFicha.Calle,struct Ficha, Calle);
// ...
printf("Ficha original = 0x%X\nFicha devuelta = 0x%X\n",&miFicha, nuevaFicha);
if(&miFicha==nuevaFicha) printf("Correcto, son iguales.\n");
else printf("Incorrecto, son diferentes.\n");
return 0;
}
Podria ser la diferencia de compilador pero, lo dudo, segun mis obserbaciones este algoritmo funciona solo con el 1ero, y los 2 ultimos campos de la estructura Ficha, con los campos como Edad, no funciona.
Saludos.