[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