Está en la página 1de 2

Tipos de datos definidos por el usuario

Typedef Ya conocemos los tipos de datos que nos ofrece C: char, int, float, double con sus variantesunsigned, arrays y punteros. Adems tenemos las estructuras. Pero existe una forma de dar nombre a los tipos ya establecidos y a sus posibles variaciones: usando typedef. C o n typedef podemos crear nombres para los tipos de datos ya existentes, ya sea por capricho o para mejorar la legibilidad o la portabilidad del programa. Por ejemplo, hay muchos programas que definen muchas variables del tipo unsigned char. Imaginemos un hipottico programa que dibuja una grfica:
unsigned char x0, y0; unsigned char x1, y1; unsigned char x, y; int F; int i; /* Coordenadas del punto origen */ /* Coordenadas del punto final */ /*Coordenadas de un punto genrico */ /* valor de la funcin en el punto (x,y) */ /* Esta la usamos como contador para los bucles */

La definicin del tipo unsigned char, aparte de ser larga no nos da informacin de para qu se usa la variable, slo del tipo de dato que es para definir nuestros propios tipos de datos debemos usar typedef de la siguiente forma: typedef tipo_de_variable nombre_nuevo; En nuestro ejemplo podramos hacer: typedef unsigned char COORD; typedef int CONTADOR; typedef int VALOR; Y ahora quedara:
COORD x0, y0; COORD x1, y1; /COORD x, y; VALOR F; CONTADOR i; /* punto origen */ /* punto final * /* punto genrico */ /* valor de la funcin en el punto (x,y) */

Punteros Tambin podemos definir tipos de punteros: int *p, *q; Podemos convertirlo en:
typedef int *ENTERO; ENTERO p, q;

Aqu p, qson punteros aunque no lleven el operador '*', puesto que ya lo lleva ENTERO incorporado. Arrays Tambin podemos declarar tipos array. Esto puede resultar ms cmodo para la gente que viene de BASIC o PASCAL, que estaban acostumbrados al tipo string en vez de char:
typedef char STRING[255]; STRING nombre;

Donde nombre es realmente char nombre[255]; Estructuras Tambin podemos definir tipos de estructuras.
Antes, sin typedef: struct _complejo { double real; double imaginario;} struct _complejo numero; Con typedef: typedef struct { double real; double imaginario;} COMPLEJO COMPLEJO numero