[C con Clase] Typedef en estructuras

Programante programante en gmail.com
Vie Jul 25 10:34:28 CEST 2008


David Reza escribió:
> Muchas gracias Steven.
>
> Respecto a mi duda, me expresé mal, porque sé que 'typedef' es una 
> palabra reservada pero en el momento no supe como referirme a él, pero 
> solo conocía su uso para definir un tipo en base a uno ya definido.
>
> Saludos

Es que es lo que estás haciendo.
Tienes
struct tagESTRUCTURA
{
...
...
...
};

En lugar de escribir siempre que uses tagESTRUCTURA, struct 
tagESTRUCTURA Variable, quieres usar ESTRUCTURA.
Por eso añadimos un typedef. Entonces nos quedaría:
struct tagESTRUCTURA
{
...
...
...
};
typedef struct tagESTRUCTURA ESTRUCTURA;


La otra forma simplemente engloba ambas.
Es más, si hacemos el typedef de lo que estamos declarando, podríamos 
incluso quitar "tagEstructura". Estaríamos creando
un struct anónimo, pero como inmediatamente pasamos a asignarle ese tipo 
a ESTRUCTURA, no presenta problemas si no
se usa antes del mismo (por ejemplo si queremos que ESTRUCTURA tenga 
punteros a ESTRUCTURA deberemos crearlos
de tipo struct tagESTRUCTURA* ya que aún no se ha producido la asignación).

Podríamos incluso englobar más aún. Es común que las APIs creen tipos 
tanto para la estructura como para el puntero a la
estructura, o incluso a un doble puntero a la estructura:
struct tagESTRUCTURA
{
...
...
...
};
typedef struct tagESTRUCTURA ESTRUCTURA;
typedef ESTRUCTURA* punteroESTRUCTURA;


Lo cual puede abreviarse como:
typedef struct tagESTRUCTURA
{
...
...
...
} ESTRUCTURA, *punteroESTRUCTURA;


Como quienes hacen los sistemas operativos tienen un nivel de C muy 
alto, y son quienes diseñan también las APIs para el
mismo, no es extraño que elijan esta última forma abreviada. Para 
desesperación de quien no sabe lo que significa :-)






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