tipos - ¿Cuál es el uso de typedef?
typedef struct en c (7)
¿Cuál es el uso de la palabra clave typedef en C? ¿Cuándo es necesario?
typedef no introduce un nuevo tipo pero solo proporciona un nuevo nombre para un tipo.
TYPEDEF
PUEDE UTILIZARSE PARA:
Tipos que combinan matrices, estructuras, punteros o funciones.
Para facilitar la portabilidad,
typedef
el tipo que necesita. Luego, cuando transfiera el código a diferentes plataformas, seleccione el tipo correcto realizando solo cambios en typedef.Un
typedef
puede proporcionar un nombre simple para un molde de tipo complicado.typedef
también se puede usar para dar nombres a tipos sin nombre. En tales casos, typedef será el único nombre para dicho tipo.
NOTA: - NO TYPEDEF
UTILIZAR TYPEDEF
CON ESTRUCTURAS. SIEMPRE UTILICE UNA ETIQUETA EN UNA DEFINICIÓN DE ESTRUCTURA INCLUSO SI NO ES NECESARIO.
De la wikipedia:
typedef es una palabra clave en los lenguajes de programación C y C ++. El objetivo de typedef es asignar nombres alternativos a los tipos existentes, con mayor frecuencia a aquellos cuya declaración estándar es engorrosa, potencialmente confusa o que puede variar de una implementación a otra.
Y:
K & R declara que hay dos razones para usar un typedef. En primer lugar, proporciona un medio para hacer que un programa sea más portátil. En lugar de tener que cambiar un tipo en todas partes, aparece a lo largo de los archivos fuente del programa, solo se necesita cambiar una sola declaración typedef. Segundo, un typedef puede hacer que una declaración compleja sea más fácil de entender.
Y un argumento en contra:
Él (Greg KH) argumenta que esta práctica no solo ofusca innecesariamente el código, sino que también puede causar que los programadores usen accidentalmente grandes estructuras creyendo que son tipos simples.
Explicando el uso de typedef en el siguiente ejemplo. Además, Typedef se usa para hacer que el código sea más legible.
#include <stdio.h>
#include <math.h>
/*
To define a new type name with typedef, follow these steps:
1. Write the statement as if a variable of the desired type were being declared.
2. Where the name of the declared variable would normally appear, substitute the new type name.
3. In front of everything, place the keyword typedef.
*/
// typedef a primitive data type
typedef double distance;
// typedef struct
typedef struct{
int x;
int y;
} point;
//typedef an array
typedef point points[100];
points ps = {0}; // ps is an array of 100 point
// typedef a function
typedef distance (*distanceFun_p)(point,point) ; // TYPE_DEF distanceFun_p TO BE int (*distanceFun_p)(point,point)
// prototype a function
distance findDistance(point, point);
int main(int argc, char const *argv[])
{
// delcare a function pointer
distanceFun_p func_p;
// initialize the function pointer with a function address
func_p = findDistance;
// initialize two point variables
point p1 = {0,0} , p2 = {1,1};
// call the function through the pointer
distance d = func_p(p1,p2);
printf("the distance is %f/n", d );
return 0;
}
distance findDistance(point p1, point p2)
{
distance xdiff = p1.x - p2.x;
distance ydiff = p1.y - p2.y;
return sqrt( (xdiff * xdiff) + (ydiff * ydiff) );
} In front of everything, place the keyword typedef.
*/
Puede alias otro tipo.
typedef unsigned int uint; /* uint is now an alias for "unsigned int" */
Typedef se usa para crear alias a tipos existentes . Es un poco misnomer : typedef no define nuevos tipos ya que los nuevos tipos son intercambiables con el tipo subyacente. Los typedefs se utilizan a menudo para mayor claridad y portabilidad en las definiciones de interfaz cuando el tipo subyacente está sujeto a cambios o no es importante.
Por ejemplo:
// Possibly useful in POSIX:
typedef int filedescriptor_t;
// Define a struct foo and then give it a typedef...
struct foo { int i; };
typedef struct foo foo_t;
// ...or just define everything in one go.
typedef struct bar { int i; } bar_t;
// Typedef is very, very useful with function pointers:
typedef int (*CompareFunction)(char const *, char const *);
CompareFunction c = strcmp;
Typedef también se puede usar para dar nombres a tipos sin nombre. En tales casos, typedef será el único nombre para dicho tipo:
typedef struct { int i; } data_t;
typedef enum { YES, NO, FILE_NOT_FOUND } return_code_t;
Las convenciones de nombres difieren. Por lo general, se recomienda utilizar un trailing_underscore_and_t
o CamelCase
.
de Wikipedia: "K & R declara que hay dos razones para usar un typedef. Primero .... Segundo, un typedef puede hacer que una declaración compleja sea más fácil de entender".
Aquí hay un ejemplo de la segunda razón para usar typedef, simplificando tipos complejos (el tipo complejo está tomado de K & R "The C programming language second edition p.136).
char (*(*x([])())
x es una función que devuelve el puntero a la matriz [] del puntero a la función que devuelve char.
Podemos hacer que la declaración anterior sea comprensible usando typedefs. Por favor mira el ejemplo a continuación.
typedef char (*pfType)(); // pf is the type of pointer to function returning
// char
typedef pfType pArrType[2]; // pArr is the type of array of pointers to
// functions returning char
char charf()
{ return(''b'');
}
pArrType pArr={charf,charf};
pfType *FinalF() // f is a function returning pointer to array of
// pointer to function returning char
{
return(pArr);
}
typedef
es para definir algo como un tipo . Por ejemplo:
typedef struct {
int a;
int b;
} THINGY;
... define THINGY
como la estructura dada. De esta forma, puedes usarlo así:
THINGY t;
...más bien que:
struct _THINGY_STRUCT {
int a;
int b;
};
struct _THINGY_STRUCT t;
... que es un poco más detallado. typedefs puede hacer algunas cosas dramáticamente más claras, especialmente los punteros a las funciones.