Typef

Solo disponible en BuenasTareas
  • Páginas : 6 (1463 palabras )
  • Descarga(s) : 0
  • Publicado : 18 de agosto de 2012
Leer documento completo
Vista previa del texto
3.2.1a typedef
§1 Sinopsis
La palabra reservada typedef se utiliza para asignar un alias (otro nombre) a un tipo. No crea ningún nuevo tipo, solo define un nuevo identificador (type-id 2.2) para un tipo que ya tiene su propio identificador (el identificador puede ser un nombre o una expresión compleja que contiene al nombre). Es importante recalcar que el nuevo nombre es un añadido, y nosustituye al identificador original. Ambos identificadores pueden ser intercambiados libremente en cualquier expresión.
Formalmente typedef es un especificador de identificador (nombre). Su introducción en el lenguaje se debe a que, como reconoce su propio creador [1], la sintaxis de declaraciones C++ es innecesariamente dura de leer y escribir. Esto se debe a la herencia del C y a que la notación noes lineal, sino que mimetiza la sintaxis de las expresiones que está basada en precedencias. En este sentido, la utilización de typedef permite paliar en parte el problema, mejora la legibilidad y ayuda a la documentación y mantenimiento del programa, ya que permite sustituir identificadores de tipo complejos por expresiones más sencillas.
§2 Sintaxis:
typedef ;
Asigna un nombre con el tipode dato de .
Nota: para distinguir un identificador introducido con un typedef de un nombre de tipo normal , al primero se le denomina nombre-typedef ("typedef-name") o alias-typedef ("typedef-alias").
Los typedef pueden ser usados con tipos simples o abstractos, pero no con nombres de funciones.
§3 Ejemplos:
typedef unsigned char BYTE;
en lo sucesivo, cualquier referencia a BYTE (es unatradición de C/C++ utilizar los alias-typedef en mayúsculas) equivale a colocar en su lugar unsigned char, incluso para crear nuevos tipos unsigned char:
BYTE z, y // equivale a: unsigned char z, y
...
typedef const float KF;
typedef const float* KF_PTR;
KF pi = 3.14;
KF_PTR ppi = π
typedef long clock_t; // no sería muy C++, mejor CLOCK_T
clock_t slice = clock();

§3.1 En realidadel nuevo identificador introducido por typedef se comporta dentro de su ámbito como una nueva palabra-clave con la que pueden declararse nuevos tipos:
typedef int* Pint;
...
Pint p1, p2; // Ok. p1 y p2 son punteros-a-int
También pueden encadenarse, de forma que pueden definirse nuevos alias en función de otros definidos previamente. Por ejemplo:
typedef char CHAR;
typedef CHAR * PCHAR,* LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;

§3.2 Como en otras declaraciones, es posible definir una serie de alias-typedef mediante expresiones unidas por comas. Por ejemplo:
typedef const char * LPCCH, * PCCH, * LPCSTR, * PCSTR ;
...
LPCCH ptr1 = "Hola América";
PCSTR ptr2 = "Hola América";
const char* ptr3 = "Hola América";
Los punteros ptr1; ptr2 y ptr3 son equivalentes.
Otrosejemplos (tomados de definiciones reales de MS VC++)
typedef long INT_PTR, *PINT_PTR;
typedef unsigned short UHALF_PTR, *PUHALF_PTR;
typedef short HALF_PTR, *PHALF_PTR;

§3.3 Otros ejemplos de typedef utilizados frecuentemente en la programación Windows ( Ejemplos):
§4 Asignaciones complejas
Es útil utilizar typedef para asignaciones complejas; en particular en la declaración y definición depunteros a funciones. Por ejemplo:
typedef long (*(*(*FPTR)())[5])(); // L.1
FPTR an; // L.2
La sentencia L.1 define un identificador: FPTR como un puntero a función que no recibe argumentos y devuelve un puntero a array de 5 punteros a función, que no reciben ningún parámetro y devuelven long. Después, L.2 declara que an es un elemento del tipo indicado.typedef void (new * new_handler)(); // L.3
new_handler set_new_handler(new_handler); // L.4
L:3 define new_handler como el identificador de un puntero a función que no recibe argumentos y devuelve void [2]. Después L.4 declara set_new_handler como el nombre de una función que devuelve el tipo new_handler recién definido y acepta un único argumento de este mismo tipo.
typedef...
tracking img