Heim Backend-Entwicklung C#.Net-Tutorial Welche Verwendung findet Typedef in der C-Sprache?

Welche Verwendung findet Typedef in der C-Sprache?

Jul 18, 2020 pm 02:23 PM
c语言

Die Verwendung von typedef ist: 1. Definieren Sie neue Typnamen für grundlegende Datentypen. 2. Definieren Sie prägnante Typnamen für benutzerdefinierte Datentypen (Strukturen, Unions und Aufzählungstypen). ; 4. Definieren Sie prägnante Namen für Zeiger.

Welche Verwendung findet Typedef in der C-Sprache?

C-Sprache ermöglicht es Benutzern, das Schlüsselwort typedef zu verwenden, um ihre eigenen benutzerdefinierten Datentypnamen zu definieren, um die standardmäßigen Basistypnamen, Array-Typnamen und Zeiger des Systems zu ersetzen Namen und benutzerdefinierte Strukturnamen, gemeinsame Namen, Aufzählungsnamen usw.

Sobald der Benutzer seinen eigenen Datentypnamen im Programm definiert, kann er seinen eigenen Datentypnamen im Programm verwenden, um den Typ von Variablen, Array-Typen, Zeigervariablentypen, Funktionstypen usw. zu definieren.

Zum Beispiel stellte die Sprache C vor C99 keinen booleschen Typ bereit, aber wir können das Schlüsselwort typedef verwenden, um einen einfachen booleschen Typ zu definieren, wie im folgenden Code gezeigt:

typedef int BOOL;
#define TRUE 1
#define FALSE 0
Nach dem Login kopieren

Definition Danach können Sie es wie grundlegende Typdaten verwenden, wie im folgenden Code gezeigt:

BOOL bflag=TRUE;
Nach dem Login kopieren

4 Verwendungen von typedef

In der Tat Bei der Verwendung gibt es hauptsächlich vier Arten von Typedef-Anwendungen.

1. Definieren Sie neue Typnamen für Basisdatentypen

Mit anderen Worten, alle Standard-Basistypen des Systems können das Schlüsselwort typedef verwenden, um den Typnamen neu zu definieren Der Beispielcode lautet wie folgt:

typedef unsigned int COUNT;
Nach dem Login kopieren

Darüber hinaus können wir diese Methode auch verwenden, um plattformunabhängige Typen zu definieren. Um beispielsweise einen Gleitkommatyp namens REAL auf der Zielplattform eins zu definieren, lassen Sie ihn den Typ mit der höchsten Genauigkeit darstellen, das heißt:

typedef long double REAL;
Nach dem Login kopieren

Ändern Sie ihn auf Plattform zwei, die Long Double nicht unterstützt, in:

typedef double REAL;
Nach dem Login kopieren

kann sogar geändert werden in:

typedef float REAL;
Nach dem Login kopieren

auf Plattformen, die Double nicht unterstützen. Auf diese Weise müssen wir beim Transplantieren eines Programms über Plattformen hinweg nur die Definition von typedef und ändern Es sind keine Änderungen am anderen Quellcode erforderlich. Tatsächlich wird diese Technik in der Standardbibliothek häufig verwendet. Die Definition von size_t in der Datei crtdefs.h von VC++2010 lautet beispielsweise wie folgt:

#ifndef _SIZE_T_DEFINED
#ifdef  _WIN64
typedef unsigned __int64    size_t;
#else
typedef _W64 unsigned int   size_t;
#endif
#define _SIZE_T_DEFINED
#endif
Nach dem Login kopieren

2. Es ist ein Benutzerdefinierter Datentyp (Strukturkörper, Vereinigungen und Aufzählungstypen) Definieren Sie prägnante Typnamen

Am Beispiel der Struktur definieren wir unten eine Struktur mit dem Namen Point:

struct Point
{
    double x;
    double y;
    double z;
};
Nach dem Login kopieren

Beim Aufruf Struktur, wir müssen diese Struktur wie den folgenden Code aufrufen:

struct Point oPoint1={100,100,0};
struct Point oPoint2;
Nach dem Login kopieren

Hier ist die Struktur struct Point ein neuer Datentyp, und beim Definieren von Variablen müssen wir dieselbe Aufrufmethode wie oben verwenden. Es gibt ein reserviertes Wort struct, aber Point kann nicht direkt zum Definieren von Variablen wie int und double verwendet werden. Jetzt verwenden wir typedef, um diese Struktur zu definieren, wie im folgenden Code gezeigt:

typedef struct tagPoint
{
    double x;
    double y;
    double z;
} Point;
Nach dem Login kopieren

Im obigen Code sind tatsächlich zwei Vorgänge abgeschlossen:

1) Definieren eines neuen Strukturtyps Der Code lautet wie folgt:

struct tagPoint
{
    double x;
    double y;
    double z;
} ;
Nach dem Login kopieren

Unter diesen bilden das Schlüsselwort struct und tagPoint zusammen diesen Strukturtyp. Diese Struktur existiert unabhängig davon, ob das Schlüsselwort typedef vorhanden ist oder nicht.

2) Verwenden Sie typedef, um dieser neuen Struktur einen Alias ​​namens Point zu geben, das heißt:

typedef struct tagPoint Point
Nach dem Login kopieren

Daher können Sie Point jetzt direkt verwenden, um Variablen wie int und double zu definieren, wie im gezeigt folgender Code:

Point oPoint1={100,100,0};
Point oPoint2;
Nach dem Login kopieren

Um unser Verständnis von typedef zu vertiefen, schauen wir uns ein Strukturbeispiel an, wie im folgenden Code gezeigt:

typedef struct tagNode
{
    char *pItem;
    pNode pNext;
} *pNode;
Nach dem Login kopieren

Oberflächlich betrachtet ist der obige Beispielcode auf die gleiche Weise wie zuvor definiert, daher sollte es kein Problem geben. Aber der Compiler hat einen Fehler gemeldet, warum? Könnte es sein, dass die C-Sprache nicht zulässt, dass eine Struktur einen Zeiger auf sich selbst enthält?

Tatsächlich liegt das Problem nicht in der Definition der Struktur selbst. Jeder sollte wissen, dass die C-Sprache zulässt, dass die Struktur Zeiger auf sich selbst enthält. Wir können viele davon in der Implementierung von Datenstrukturen wie verknüpften Listen sehen . Klassenbeispiel. Was ist also das Problem? Tatsächlich liegt das grundlegende Problem immer noch in der Anwendung von typedef.

Im obigen Code wird die pNext-Deklaration während der Einrichtung der neuen Struktur angetroffen und ihr Typ ist pNode. Hierbei ist zu beachten, dass pNode den neuen Alias ​​der Struktur darstellt. Wenn der Strukturtyp selbst nicht erstellt wurde, kennt der Compiler pNode überhaupt nicht, da der neue Alias ​​dieses Strukturtyps noch nicht vorhanden ist, sodass er natürlich einen Fehler meldet. Daher müssen wir einige entsprechende Anpassungen vornehmen, wie zum Beispiel die pNext-Deklaration in der Struktur wie folgt ändern:

typedef struct tagNode
{
    char *pItem;
    struct tagNode *pNext;
} *pNode;
Nach dem Login kopieren

oder die Struktur und die Typedef separat definieren, wie im folgenden Code gezeigt:

typedef struct tagNode *pNode;
struct tagNode
{
    char *pItem;
    pNode pNext;
};
Nach dem Login kopieren

Im obigen Code verwenden wir auch typedef, um einem Typ tagNode, der noch nicht vollständig deklariert wurde, einen neuen Alias ​​zu geben. Obwohl diese Vorgehensweise vom C-Compiler vollständig unterstützt wird, wird sie jedoch nicht empfohlen. Es wird empfohlen, die folgende Standarddefinitionsmethode zu verwenden:

struct tagNode
{
    char *pItem;
    struct tagNode *pNext;
};
typedef struct tagNode *pNode;
Nach dem Login kopieren

3、为数组定义简洁的类型名称

它的定义方法很简单,与为基本数据类型定义新的别名方法一样,示例代码如下所示:

typedef int INT_ARRAY_100[100];
INT_ARRAY_100 arr;
Nach dem Login kopieren

4、为指针定义简洁的名称

对于指针,我们同样可以使用下面的方式来定义一个新的别名:

typedef char* PCHAR;
PCHAR pa;
Nach dem Login kopieren

对于上面这种简单的变量声明,使用 typedef 来定义一个新的别名或许会感觉意义不大,但在比较复杂的变量声明中,typedef 的优势马上就体现出来了,如下面的示例代码所示:

int *(*a[5])(int,char*);
Nach dem Login kopieren

对于上面变量的声明,如果我们使用 typdef 来给它定义一个别名,这会非常有意义,如下面的代码所示:

// PFun是我们创建的一个类型别名
typedef int *(*PFun)(int,char*);
// 使用定义的新类型来声明对象,等价于int*(*a[5])(int,char*);
PFun a[5];
Nach dem Login kopieren

小心使用 typedef 带来的陷阱

接下来看一个简单的 typedef 使用示例,如下面的代码所示:

typedef char* PCHAR;
int strcmp(const PCHAR,const PCHAR);
Nach dem Login kopieren

在上面的代码中,“const PCHAR” 是否相当于 “const char*” 呢?

答案是否定的,原因很简单,typedef 是用来定义一种类型的新别名的,它不同于宏,不是简单的字符串替换。因此,“const PCHAR”中的 const 给予了整个指针本身常量性,也就是形成了常量指针“char*const(一个指向char的常量指针)”。即它实际上相当于“char*const”,而不是“const char*(指向常量 char 的指针)”。当然,要想让 const PCHAR 相当于 const char* 也很容易,如下面的代码所示:

typedef const char* PCHAR;
int strcmp(PCHAR, PCHAR);
Nach dem Login kopieren

其实,无论什么时候,只要为指针声明 typedef,那么就应该在最终的 typedef 名称中加一个 const,以使得该指针本身是常量。

还需要特别注意的是,虽然 typedef 并不真正影响对象的存储特性,但在语法上它还是一个存储类的关键字,就像 auto、extern、static 和 register 等关键字一样。因此,像下面这种声明方式是不可行的:

typedef static int INT_STATIC;
Nach dem Login kopieren

不可行的原因是不能声明多个存储类关键字,由于 typedef 已经占据了存储类关键字的位置,因此,在 typedef 声明中就不能够再使用 static 或任何其他存储类关键字了。当然,编译器也会报错,如在 VC++2010 中的报错信息为“无法指定多个存储类”。

相关推荐:《c语言教程

Das obige ist der detaillierte Inhalt vonWelche Verwendung findet Typedef in der C-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

C Sprachdatenstruktur: Datenrepräsentation und Betrieb von Bäumen und Grafiken C Sprachdatenstruktur: Datenrepräsentation und Betrieb von Bäumen und Grafiken Apr 04, 2025 am 11:18 AM

C Sprachdatenstruktur: Die Datenrepräsentation des Baumes und des Diagramms ist eine hierarchische Datenstruktur, die aus Knoten besteht. Jeder Knoten enthält ein Datenelement und einen Zeiger auf seine untergeordneten Knoten. Der binäre Baum ist eine besondere Art von Baum. Jeder Knoten hat höchstens zwei Kinderknoten. Die Daten repräsentieren structTreenode {intdata; structTreenode*links; structTreenode*rechts;}; Die Operation erstellt einen Baumtraversalbaum (Vorbereitung, in Ordnung und späterer Reihenfolge) Suchbauminsertion-Knoten Lösches Knotendiagramm ist eine Sammlung von Datenstrukturen, wobei Elemente Scheitelpunkte sind, und sie können durch Kanten mit richtigen oder ungerechten Daten miteinander verbunden werden, die Nachbarn darstellen.

Die Wahrheit hinter dem Problem der C -Sprachdatei Die Wahrheit hinter dem Problem der C -Sprachdatei Apr 04, 2025 am 11:24 AM

Die Wahrheit über Probleme mit der Dateibetrieb: Dateiöffnung fehlgeschlagen: unzureichende Berechtigungen, falsche Pfade und Datei besetzt. Das Schreiben von Daten fehlgeschlagen: Der Puffer ist voll, die Datei ist nicht beschreibbar und der Speicherplatz ist nicht ausreichend. Andere FAQs: Langsame Dateitraversal, falsche Textdateicodierung und Binärdatei -Leser -Fehler.

Was sind die grundlegenden Anforderungen für C -Sprachfunktionen? Was sind die grundlegenden Anforderungen für C -Sprachfunktionen? Apr 03, 2025 pm 10:06 PM

C -Sprachfunktionen sind die Grundlage für die Code -Modularisierung und das Programmaufbau. Sie bestehen aus Deklarationen (Funktionsüberschriften) und Definitionen (Funktionskörper). C Sprache verwendet standardmäßig Werte, um Parameter zu übergeben, aber externe Variablen können auch mit dem Adresspass geändert werden. Funktionen können oder haben keinen Rückgabewert, und der Rückgabewerttyp muss mit der Deklaration übereinstimmen. Die Benennung von Funktionen sollte klar und leicht zu verstehen sein und mit Kamel oder Unterstrich die Nomenklatur. Befolgen Sie das Prinzip der einzelnen Verantwortung und behalten Sie die Funktion ein, um die Wartbarkeit und die Lesbarkeit zu verbessern.

Wie man einen Countdown in der C -Sprache ausgibt Wie man einen Countdown in der C -Sprache ausgibt Apr 04, 2025 am 08:54 AM

Wie gibt ich einen Countdown in C aus? Antwort: Verwenden Sie Schleifenanweisungen. Schritte: 1. Definieren Sie die Variable N und speichern Sie die Countdown -Nummer in der Ausgabe. 2. Verwenden Sie die while -Schleife, um n kontinuierlich zu drucken, bis n weniger als 1 ist; 3. Drucken Sie im Schleifenkörper den Wert von n aus; 4. Am Ende der Schleife subtrahieren Sie N um 1, um den nächsten kleineren gegenseitigen gegenseitigen gegenseitigen gegenseitig auszugeben.

CS-Woche 3 CS-Woche 3 Apr 04, 2025 am 06:06 AM

Algorithmen sind die Anweisungen zur Lösung von Problemen, und ihre Ausführungsgeschwindigkeit und Speicherverwendung variieren. Bei der Programmierung basieren viele Algorithmen auf der Datensuche und Sortierung. In diesem Artikel werden mehrere Datenabruf- und Sortieralgorithmen eingeführt. Die lineare Suche geht davon aus, dass es ein Array gibt [20.500,10,5,100, 1,50] und die Nummer 50 ermitteln muss. Der lineare Suchalgorithmus prüft jedes Element im Array Eins nach eins nach dem anderen, bis der Zielwert gefunden oder das vollständige Array durchquert wird. Der Algorithmus-Flussdiagramm lautet wie folgt: Der Pseudo-Code für die lineare Suche lautet wie folgt: Überprüfen Sie jedes Element: Wenn der Zielwert gefunden wird: Return Return Falsch C-Sprache Implementierung: #includeIntmain (void) {i

Fehlerbehebungstipps für die Verarbeitung von Dateien in der C -Sprache Fehlerbehebungstipps für die Verarbeitung von Dateien in der C -Sprache Apr 04, 2025 am 11:15 AM

Fehlerbehebungstipps für C -Sprachverarbeitungsdateien Wenn Dateien in der C -Sprache verarbeitet werden, können Sie auf verschiedene Probleme stoßen. Das Folgende sind häufig zu Problemen und entsprechende Lösungen: Problem 1: Der Dateicode kann nicht geöffnet werden: Datei*fp = fopen ("myFile.txt", "r"); if (fp == null) {// Datei Öffnen fehlgeschlagen} Grund} Grund: Dateipfad -Fehler -Datei nicht vorhandener Datei -Read -Lösung vorhanden. Charbuffer [100]; size_tread_bytes = fread (Puffer, 1, Siz

C Sprach -Multithread -Programmierung: Ein Anfängerleitfaden und Fehlerbehebung C Sprach -Multithread -Programmierung: Ein Anfängerleitfaden und Fehlerbehebung Apr 04, 2025 am 10:15 AM

C Sprachmultithreading -Programmierhandbuch: Erstellen von Threads: Verwenden Sie die Funktion pThread_create (), um Thread -ID, Eigenschaften und Threadfunktionen anzugeben. Threadsynchronisation: Verhindern Sie den Datenwettbewerb durch Mutexes, Semaphoren und bedingte Variablen. Praktischer Fall: Verwenden Sie Multi-Threading, um die Fibonacci-Nummer zu berechnen, mehrere Threads Aufgaben zuzuweisen und die Ergebnisse zu synchronisieren. Fehlerbehebung: Lösen Sie Probleme wie Programmabstürze, Thread -Stop -Antworten und Leistungs Engpässe.

Was sind die Arten von Rückgabewerten der C -Sprachfunktion? Zusammenfassung der Arten von Rückgabewerten der C -Sprachfunktion? Was sind die Arten von Rückgabewerten der C -Sprachfunktion? Zusammenfassung der Arten von Rückgabewerten der C -Sprachfunktion? Apr 03, 2025 pm 11:18 PM

Die Rückgabewerttypen von C -Sprachfunktion umfassen Int-, Float-, Doppel-, Zeichen-, Hohlraum- und Zeigertypen. INT wird verwendet, um Ganzzahlen zurückzugeben, zu schweben und doppelt zu doppelt sind, um Schwimmer zurückzugeben, und char gibt Zeichen zurück. Void bedeutet, dass die Funktion keinen Wert zurückgibt. Der Zeigertyp gibt die Speicheradresse zurück. Achten Sie darauf, Speicherverlust zu vermeiden. Eine Struktur oder ein Konsortium kann mehrere verwandte Daten zurückgeben.

See all articles