Ausführliche Erklärung des C-Sprachschlüsselworts typedef

Detaillierte Erläuterung der Typdefinition

Typedefs und primitive Typen

typedef ist ein Schlüsselwort in der C-Sprache und dient dazu, einen neuen Namen für einen Datentyp zu definieren. Die einfachste Verwendung besteht darin, typedef zu verwenden, um einen Alias ​​​​für den Basistyp der C-Sprache zu verwenden.

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

Wir haben festgestellt, dass CHAR zu diesem Zeitpunkt das ursprüngliche Schlüsselwort char ersetzt hat.

Die häufigste Verwendung ist:

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; 

Während einiger eingebetteter Entwicklungen müssen wir den Bool-Typ selbst definieren und einige Typen definieren, die die Anzahl der Zeichen direkt darstellen.

Typdefinition

Ein Typedef kann auch verwendet werden, um einer Struktur einen neuen Namen zu geben.

Die übliche Art der Erklärung ist

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

Dies struct studentvereinfacht einen Typ direkt zu Stueinem Typ.

Zum Beispiel:

#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 und Arrays

Wenn Sie ein Array wiederholt definieren müssen

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

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

Typedefs und Zeiger

Wir können die Zeigersyntax wie folgt ausblenden

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

Typdefinitionen und Funktionen

Funktionszeiger werden im Allgemeinen für Rückrufe verwendet, und Rückrufe beinhalten Funktionszeiger. Wenn unser Programm über die folgenden Funktionen verfügt

void printHello(int i);

Dann müssen wir einen Funktionszeiger definieren, darauf zeigen printHellound diese Methode aufrufen. Der Code lautet wie folgt:

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

Wie Sie sehen, ist die Deklaration eines Funktionszeigers komplizierter, insbesondere wenn Sie dieselbe Art von Funktionszeigervariable an mehreren Stellen deklarieren möchten. Der Code ist komplizierter, daher gibt es die folgenden vereinfachten Methoden:

typedef void (*PrintHelloHandle)(int);

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

Zukünftig müssen Programme an anderen Stellen ähnliche Funktionszeiger deklarieren und benötigen lediglich den folgenden Code:

PrintHelloHandle pFuncOther;

Dadurch wird der Code prägnanter

typedef-Schlussfolgerung

typedef verhält sich ein wenig wie ein #define-Makro und ersetzt seinen tatsächlichen Typ durch ein Synonym. Dies ist jedoch kein einfacher Ersatz. Er wird vom Compiler zur Kompilierungszeit abgeleitet, sodass das Verhalten von typedef etwas kompliziert ist. Wenn man diese komplizierten Verhaltensweisen auseinandernimmt, handelt es sich tatsächlich um einige Ersetzungen. Nur der Einfachheit halber erstellt typedef keine neuen Typen.

Ich denke du magst

Origin blog.csdn.net/weixin_43903639/article/details/130829201
Empfohlen
Rangfolge