[C con Clase] Typedef en estructuras

Steven Davidson srd4121 en njit.edu
Mie Jul 23 22:43:27 CEST 2008


Hola David,

David Reza wrote:
> Quisiera saber qué utilidad tiene anteponer 'typedef' en la
> definición de una estructura. He visto (sobre todo en el curso de
> WINAPI) que las estructuras están definidas de la siguiente forma:
> 
>     typedef struct tagESTRUCTURA
>     {
>     ...
>     ...
>     ...
>     } ESTRUCTURA;
> 
> 
> y para declarar una variable de estructura, en vez de declararla como
> 
>     tagESTRUCTURA miEstructura;
> 
> 
> se declaran como
> 
>     ESTRUCTURA miEstructura;
> 
> 
> ¿Qué ventajas tiene esto ante el método "tradicional" o el que se 
> explica en el capítulo 11 del curso de C++?
> 

En primer lugar, no es que se anteponga 'typedef' a una estructura. El 
vocablo 'typedef' forma parte del lenguaje como muchos otros; es decir, 
no es que se añada a algo. Es como decir que 'int' se antepone a una 
variable. Esto aunque aparente hacerlo, realmente se trata de una 
declaración. Algo parecido sucede con 'typedef': definimos un tipo 
basándonos en otro. Podríamos decir que 'typedef' crea un sobrenombre: 
un apodo para otro tipo.

En C++, no aparenta tener mucha utilidad, porque efectivamente podemos 
usar el nombre de la estructura directamente. Sin embargo, esto no es 
"tradicional" en el sentido de que 'typedef' existe en C. Bajo C, no 
podemos usar el nombre de la estructura directamente. Esto es,

en C, escribiríamos esto:

struct tagESTRUCTURA miEstructura;

En C++, podemos obviar la parte de 'struct' en la declaración, escribiendo:

tagESTRUCTURA miEstructura;

Por esta razón, usamos 'typedef' bajo C para no tener que escribir 
'struct' cada vez que queramos declarar una estructura.

En cuanto al API de MS-Windows, tienes que tener presente que está 
diseñado para C. Por eso contiene muchas definiciones de tipo y 
funciones globales.


Por otro lado, sí tenemos otra razón para usar 'typedef', aun usando 
C++. La gran utilidad de usar 'typedef' viene a la hora de diseñar el 
API. Cuando diseñamos tanto un API como una clase, es recomendable 
establecer todos los miembros de tal diseño. Típicamente, establecemos 
nuestros propios tipos al igual que las funciones, variables, y si hace 
falta macros. En cuanto a los tipos, lo hacemos por dos razones: a) 
esconder los tipos "verdaderos" y fundamentales, y b) presentar nuestros 
tipos invariables que servirán para cualquier plataforma y cualquier 
"versión" si queremos cambiar su representación interna. Estas razones 
son parecidas a las razones dadas por la Programación Orientada a Objetos.


Espero haber aclarado el tema.

Steven





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