¿Qué significa typedef en lenguaje C? ¿Para qué es?
Typedef es una sintaxis común en C/C. Las funciones de typedef se pueden resumir en cuatro tipos:
1 Definir un nombre de tipo
Convencional. la aplicación, si desea definir dos punteros de caracteres, escriba el siguiente código: char *a, b
(1) char* a,
(2) char c; = 'm';
(3) a=amp;c;
(4)b=amp;c;
El código anterior es incorrecto, sólo a es un puntero de carácter y b sigue siendo una variable de carácter. La definición de macro a través de #define aún no es válida, porque la definición de macro es solo reemplazo de caracteres.
Lo siguiente es factible:
(1) typedef char* PCHAR
(2) PCHAR pa, pb;?
2, utilizado para la estructura de estructura
(1)#include lt; stdio.hgt;
(2) struct tagPOINT1
(3)?{ p>
(4) int x;
(5) int y
(6)}
(7) int principal();
(8){
(9)tagPOINT1 p1, p2; //La compilación de esta oración no puede pasar
(10) //Mensaje de error: error: nombre de tipo desconocido 'tagPOINT1'
(11) //Entorno: Gcc 4.8.1
(12)}
Se debe utilizar la siguiente definición ;
(1) struct tagPOINT1 p1, p2; //Debe tener la palabra clave struct
(2) Usando typedef, puedes omitir la estructura al definir la estructura
(3)ypedef struct tagPOINT
(4){
(5)int x;
(6)int y;
(7)}POINT;
(8)POINT p1; // Esto escribirá una estructura menos que el método original.
3. Trasplante multiplataforma
Al escribir programas, si se tiene en cuenta el trasplante de plataforma, las diferencias en la capa de hardware deben abstraerse del código, por ejemplo, el espacio ocupado por variables, modo terminal, etc. ?
Considere una variable de punto flotante. En diferentes plataformas de hardware, el espacio ocupado puede ser diferente. En este caso, puede usar typedef para definirlo en un archivo de encabezado separado. Contenido relacionado con el hardware:
(1) typedef float REAL;
(2) typedef short int INT16;
(3) typedef int INT32
(4)...
En este caso, si considera trasplantar el programa en el futuro, solo necesita modificar el archivo de encabezado.
4. Dar alias a declaraciones complejas
Las declaraciones complejas tienen la forma: void (*b[10]) (void (*)());
Significado: En primer lugar, *b[10] es una matriz de punteros y los diez elementos que contiene son todos punteros. ¿Qué tipo de puntero es? Es un puntero de función con un tipo de retorno nulo y parámetros formales nulos.
Este tipo de declaración compleja se puede simplificar con typedef:?
Primero: declarar el puntero de función detrás:
(1) typedef void (pFunParam * ) ();
Luego declara la matriz de punteros anterior:
(1) typedef void (*pFunx)(pFunParam);
La versión simplificada del original Versión de declaración:
pFunx b[10];
Durante el proceso de redacción de este documento, me referí al uso de typedef del blog en línea
que mencionaba un complejo declaración:
(1) doube(*)() (*e)[9];
Sin embargo, esta declaración no pasa cuando se compila bajo gcc. intención, parece Debería declararse así:
(1) double (*(*e)[9])();
e es un puntero a un 9- matriz dimensional, y la matriz es un puntero de función, el parámetro formal del puntero de función está vacío y el tipo de retorno es doble.
En este caso, se debe usar typedef para simplificar la declaración:
typedef (*(*ptr)[9])();
Extendido información
Typedef es una palabra clave en lenguaje C, que se utiliza para definir un nuevo nombre para un tipo de datos. Los tipos de datos aquí incluyen tipos de datos internos (int, char, etc.) y tipos de datos personalizados (struct, etc.).
Generalmente hay dos propósitos al usar typedef en programación. Uno es dar a las variables un nuevo nombre que sea fácil de recordar y tenga un significado claro, y el otro es simplificar algunas declaraciones de tipos más complejas.
Enciclopedia Baidu-typedef