[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