Palabra clave en lenguaje C typedef explicación detallada

Explicación detallada de typedef

typedefs y tipos primitivos

typedef es una palabra clave en lenguaje C , y su función es definir un nuevo nombre para un tipo de datos. El uso más simple es usar typedef para tomar un alias para el tipo básico de lenguaje C.

char a = 'H';
typedef char CHAR;
CHAR b = 'E';
printf("%c %c\n",a,b);

Descubrimos que CHAR ha reemplazado la palabra clave original de char en este momento.

El uso más común es:

typedef enum {
    
     true=1, false=0 } bool;

typedef signed char            int8_t; 
typedef signed short int       int16_t; 
typedef signed int             int32_t;  
typedef signed long long int   int64_t; 
typedef unsigned char          uint8_t; 
typedef unsigned short int     uint16_t; 
typedef unsigned int           uint32_t; 
typedef unsigned long long int uint64_t; 

En el proceso de desarrollo integrado, necesitamos definir el tipo bool por nosotros mismos y definir algunos tipos que representen directamente la cantidad de caracteres.

estructura typedef

Un typedef también se puede usar para dar a una estructura un nuevo nombre.

La forma habitual de declarar es

typedef struct student {
    
    
	int age;
	char name[20];
} Stu;

Esto struct studentsimplifica un tipo directamente a Stuun tipo.

Por ejemplo:

#include <stdio.h>
#include <malloc.h>

typedef struct stack {
    
    
    int eax;
    int ebx;
    int ecx;
    int edx;
} STACK;


int main() {
    
    
    printf("%d \n", sizeof(STACK));
    printf("%d \n", sizeof(struct stack));
    STACK *p1 = (STACK *) malloc(sizeof(STACK));
    struct stack *p2 = (struct stack *) malloc(sizeof(struct stack));
    p1->eax = 1;
    p1->ebx = 1;
    p1->ecx = 1;
    p1->edx = 1;
    return 0;
}

typedefs y arreglos

Cuando necesita definir repetidamente una matriz

char line[81]; 
char text[81];

// 可以像下面这样定义
typedef char Line[81]; 
Line text, secondline;

typedefs y punteros

Podemos ocultar la sintaxis del puntero como a continuación

typedef char* pstr; 
pstr str = "abcdef";
int mystrcmp(pstr, pstr);

typedefs y funciones

Los punteros de función se usan generalmente para devoluciones de llamada, y las devoluciones de llamada involucran punteros de función.Cuando nuestro programa tiene las siguientes funciones

void printHello(int i);

Luego necesitamos definir un puntero de función, señalarlo printHelloy llamar a este método, el código es el siguiente:

void (*pFunc)(int);            // 定义函数指针
pFunc = &printHello;           // 函数指针指向printHello
(*pFunc)(110);                 // 调用printHello

Como puede ver, declarar un puntero de función es más complicado, especialmente cuando desea declarar el mismo tipo de variable de puntero de función en varios lugares, el código es más complicado, por lo que existen los siguientes métodos simplificados:

typedef void (*PrintHelloHandle)(int);

PrintHelloHandle pFunc;
pFunc = &printHello;
(*pFunc)(110);

En el futuro, los programas en otros lugares deberán declarar punteros de funciones similares y solo necesitarán el siguiente código:

PrintHelloHandle pFuncOther;

Esto hace que el código sea más conciso.

conclusión de typedef

typedef se comporta un poco como una macro #define, sustituyendo un sinónimo por su tipo real. Pero no es un reemplazo simple, será inferido por el compilador en tiempo de compilación, por lo que el comportamiento de typedef es un poco complicado. Tomando estos comportamientos complicados aparte, en realidad son algunos reemplazos, solo por la simplicidad del código, typedef no crea nuevos tipos.

Supongo que te gusta

Origin blog.csdn.net/weixin_43903639/article/details/130829201
Recomendado
Clasificación