Curso de CEl Rincón del C - www.elrincondelc.com

Tipos de datos definidos por el usuario

[Anterior] [Siguiente] [Contenido]

Contenido

Typedef

Ya conocemos los tipos de datos que nos ofrece C: char, int, float, double con sus variantes unsigned, arrays y punteros. Además tenemos las estructuras. Pero existe una forma de dar nombre a los tipos ya establecidos y a sus posibles variaciones: usando typedef. Con 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 hipotético programa que dibuja una gráfica:

unsigned char x0, y0;	/* Coordenadas del punto origen */
unsigned char x1, y1;	/* Coordenadas del punto final */
unsigned char x, y;	/* Coordenadas de un punto genérico */
int F;		/* valor de la función en el punto (x,y) */
int i;		/* Esta la usamos como contador para los bucles */

La definición del tipo unsigned char aparte de ser larga no nos da información de para qué se usa la variable, sólo 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 podríamos hacer:

typedef unsigned char COORD;
typedef int CONTADOR;
typedef int VALOR;

y ahora quedaría:

COORD x0, y0;	/* punto origen */
COORD x1, y1;	/* punto final */
COORD x, y;	/* punto genérico */
VALOR F;	/* valor de la función en el punto (x,y) */
CONTADOR i;

Ahora, nuestros nuevos tipos de datos, aparte de definir el tipo de variable nos dan información adicional de las variables. Sabemos que x0, y0, x1, y1, x, y son coordenadas y que i es un contador sin necesidad de indicarlo con un comentario.

Realmente no estamos creando nuevos tipos de datos, lo que estamos haciendo es darles un nombre más cómodo para trabajar y con sentido para nosotros.

[Arriba]

Punteros

También podemos definir tipos de punteros:

int *p, *q;

Podemos convertirlo en:

typedef int *ENTERO;

ENTERO p, q;

Aquí p, q son punteros aunque no lleven el operador '*', puesto que ya lo lleva ENTERO incorporado.

[Arriba]

Arrays

También podemos declarar tipos array. Esto puede resultar más cómodo 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];.

[Arriba]

Estructuras

También 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;

[Arriba]

[Anterior] [Siguiente] [Contenido]

© Gorka Urrutia

www.elrincondelc.com