Heim häufiges Problem Was ist der Unterschied zwischen typedef und define in der C-Sprache?

Was ist der Unterschied zwischen typedef und define in der C-Sprache?

Apr 04, 2019 am 09:54 AM

Der Unterschied zwischen typedef und define ist: define ist ein Vorverarbeitungseditor, und definierbare Makros können ersetzt werden, während typedef vom Editor verarbeitet wird und den Bereichsregeln folgt und als definierter Typalias verwendet werden kann

#define ist eine C-Direktive, die auch ein Alias ​​zum Definieren verschiedener Datentypen ist, ähnlich wie typedef. Es gibt jedoch immer noch Unterschiede zwischen ihnen. Im Folgenden werde ich die Unterschiede im Detail vorstellen, was hoffentlich für alle hilfreich ist >

[Empfohlener Kurs: Was ist der Unterschied zwischen typedef und define in der C-Sprache?C Language Tutorial

]

1. Präprozessor VS Compiler

#define by Präprozessor Wird vom Prozessor verwaltet und kopiert und fügt den #define-Wert vom Definitionspunkt zum Verwendungspunkt ein. Typedefs hingegen werden vom Compiler verarbeitet und sind die eigentlichen Definitionen neuer Typen. Bis die Steuerung den Compiler erreicht, sind alle #defines ersetzt.

Die Auswirkung von Unterschieden

(1) typedef sollte mit einem Semikolon enden, aber #define sollte nicht mit einem Semikolon enden
( 2) Es kann zu Nebenwirkungen der Substitution im #define kommen, zum Beispiel:

   typedef char * string_t;         
   #define string_d char *        
   string_t s1,s2; // s1和s2都是char *类型        
   string_d s3,s4; // s3是char *但是s4的类型是char(而不是char *)
Nach dem Login kopieren

Das Problem in der zweiten Deklaration besteht darin, dass der Präprozessor sie durch

char * s3,s4;
Nach dem Login kopieren

ersetzt, was bedeutet, dass s3 von ist Geben Sie char* ein, aber s4 wird vom Typ char sein. Wenn Sie möchten, dass alle Variablen Zeigertypen sind, müssen alle Variablen *

(3) angeben. typedef folgt den Bereichsregeln. Das heißt, wenn ein neuer Typ in einem Bereich (innerhalb einer Funktion) definiert wird, wird der neue Typname nur angezeigt, wenn der Bereich vorhanden ist. Wenn der Präprozessor jedoch auf ein #define trifft, ersetzt es alle Vorkommen (danach gibt es keine Scoping-Regeln). Zum Beispiel:

 int main (){            
 { 
 //新范围开始              
 typedef int myInt_t;                 
 #define myInt_d int                
 myInt_t a;  // a的类型为int                
 myInt_d b;  // b的类型为int            
 } //新范围结束           
 myInt_t c; //错误,输入myInt_t未找到            
 myInt_d d; //d的类型为int        
 }
Nach dem Login kopieren

2. Makro-VS-Typalias

#define kann auch zum Definieren von Makros verwendet werden, typedef kann jedoch nur verwendet werden, um einen neuen Namen für bereitzustellen ein vorhandener Typ (es können keine neuen Typen erstellt werden). Ebenso kann #define verwendet werden, um die Variable

#define N 10
Nach dem Login kopieren
zu definieren, die N nicht wirklich definiert, sondern N im gesamten Code durch 10 ersetzt. Es kann also für benannte Konstanten verwendet werden. Typedef kann nur neue Namen für definierte Typen bereitstellen

3. Typedef als Typalias verwenden

Einige Typdefinitionen können nur mit typedef definiert werden und können nicht #define verwendet werden Definition. Beispiel: (1) Weisen Sie dem Integer-Array der Größe 10 einen neuen Namen zu

       typedef int arr [ 10 ] ;
Nach dem Login kopieren

(2) Weisen Sie dem Strukturtyp einen neuen Namen zu

typedef struct {           
int a;            
char b;        
} myType;
Nach dem Login kopieren

Zusammenfassung: Die Das Obige ist dies. Dies ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für alle hilfreich ist.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen typedef und define 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 尊渡假赌尊渡假赌尊渡假赌

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)

Verwendung der Typedef-Struktur in der C-Sprache Verwendung der Typedef-Struktur in der C-Sprache May 09, 2024 am 10:15 AM

typedef struct wird in der C-Sprache zum Erstellen von Strukturtypaliasen verwendet, um die Verwendung von Strukturen zu vereinfachen. Es weist einem neuen Datentyp ein Alias ​​auf eine vorhandene Struktur zu, indem es den Strukturalias angibt. Zu den Vorteilen gehören verbesserte Lesbarkeit, Wiederverwendung von Code und Typprüfung. Hinweis: Die Struktur muss vor der Verwendung eines Alias ​​definiert werden. Der Alias ​​muss im Programm eindeutig sein und nur innerhalb des Bereichs gültig sein, in dem er deklariert ist.

Was ist die Verwendung von typedef Was ist die Verwendung von typedef Sep 04, 2023 pm 01:20 PM

Die Verwendung von typedef besteht darin, neue Aliase für vorhandene Datentypen zu erstellen. Die Verwendung von Typedefs kann die Lesbarkeit und Wartbarkeit Ihres Codes verbessern, insbesondere beim Umgang mit komplexen Datentypen. Bei einfachen Datentypen wie Ganzzahlen, Gleitkommazahlen oder Zeichen liegen die Vorteile der Verwendung von Aliasen nicht auf der Hand. Bei komplexen Datentypen wie Zeigern, Strukturen, Arrays und Funktionen liegen die Vorteile der Verwendung von Aliasen jedoch auf der Hand. Eine Typedef kann nicht vor einer Variablen- oder Funktionsdefinition verwendet werden und wird normalerweise am Anfang einer Programmdatei oder nach einer Strukturdefinition erstellt.

Verständnis der Speicherverwaltung von C++-Funktionszeigern: Zeigerfallen vermeiden Verständnis der Speicherverwaltung von C++-Funktionszeigern: Zeigerfallen vermeiden Apr 29, 2024 pm 09:03 PM

Bei der Verwendung von Funktionszeigern in C++ muss die Speicherverwaltung sorgfältig überlegt werden, um Fallstricke zu vermeiden. Zu diesen Traps gehören Dangling-Zeiger (die auf Funktionen außerhalb ihres Gültigkeitsbereichs zeigen) und Wild-Zeiger (Funktionszeiger, die niemals initialisiert oder auf nullptr gesetzt werden). Um diese Fallstricke zu vermeiden, befolgen Sie die folgenden Best Practices: Initialisieren Sie immer Funktionszeiger, verwalten Sie den Speicher sorgfältig und verwenden Sie intelligente Zeiger. Auf diese Weise können Sie Funktionszeiger sicher verwenden und vermeiden, in Zeigerfallen zu tappen.

Detaillierte Erläuterung des Linux-Kernel-Timers und der Verzögerungsarbeitstreiberentwicklung Detaillierte Erläuterung des Linux-Kernel-Timers und der Verzögerungsarbeitstreiberentwicklung Feb 13, 2024 am 11:57 AM

Linux-Kernel-Timer und Verzögerungsaufgaben sind zwei häufig verwendete Mechanismen zur Implementierung geplanter Aufgaben und verzögerter Ausführungsaufgaben. Sie ermöglichen es dem Treiber, bestimmte Funktionen zum richtigen Zeitpunkt auszuführen, um sie an die Anforderungen und Eigenschaften des Hardwaregeräts anzupassen. Aber wie nutzt man Linux-Kernel-Timer richtig, um mit Verzögerungen umzugehen? In diesem Artikel werden die grundlegenden Kenntnisse und Fähigkeiten der Entwicklung von Linux-Kernel-Timern und Verzögerungsarbeitstreibern aus theoretischer und praktischer Sicht sowie einige häufig auftretende Probleme und Lösungen vorgestellt. Der Timer der Kernel-Timer-Software basiert letztendlich auf der Hardware-Uhr. Der Kernel erkennt, ob jeder im Kernel registrierte Timer abgelaufen ist. Wenn er abläuft, ruft er die entsprechende Registrierungsfunktion auf dies als Unterbrechung zur unteren Hälfte. Wirklichkeit

defineSo definieren Sie mehrzeilige Makros defineSo definieren Sie mehrzeilige Makros Oct 11, 2023 pm 01:24 PM

define definiert ein mehrzeiliges Makro, indem es „do { \ printf("%d\n", x \ } while (0)“ zur Definition in mehrere Zeilen aufteilt. In einer Makrodefinition muss der Backslash „\“ das letzte Zeichen der Makrodefinition sein und darf weder Leerzeichen noch Kommentare enthalten. Wenn Sie „\“ zur Zeilenfortsetzung verwenden, achten Sie darauf, dass der Code lesbar bleibt und stellen Sie sicher, dass am Ende jeder Zeile ein „\“ steht.

Entdecken Sie die Bedeutung und Rolle der Definitionsfunktion in PHP Entdecken Sie die Bedeutung und Rolle der Definitionsfunktion in PHP Mar 19, 2024 pm 12:12 PM

Die Bedeutung und Rolle der Definitionsfunktion in PHP 1. Grundlegende Einführung in die Definitionsfunktion In PHP ist die Definitionsfunktion eine Schlüsselfunktion zum Definieren von Konstanten. Konstanten ändern ihre Werte während der Ausführung des Programms nicht. Mit der Funktion „Definieren“ definierte Konstanten können im gesamten Skript aufgerufen werden und sind global. 2. Die Syntax der Definitionsfunktion Die grundlegende Syntax der Definitionsfunktion lautet wie folgt: define("Konstantenname",Konstantenwert&qu

So schreiben Sie einfachen Feuerwerkscode in C-Sprache So schreiben Sie einfachen Feuerwerkscode in C-Sprache Apr 13, 2024 pm 09:18 PM

Um einen einfachen Feuerwerkscode in C zu schreiben, müssen Sie die folgenden Schritte ausführen: Header-Dateien und Bibliotheken einbinden. Definieren Sie Konstanten und Makros. Erstellen Sie eine Partikeldatenstruktur. Globale Variablen deklarieren. Initialisieren Sie die Feuerwerkspartikel in der Funktion main(). Aktualisieren Sie die Position und Geschwindigkeit des Partikels in der Spielschleife und zeichnen Sie sie. Suchen und vernichten Sie Partikel, die das Ende ihrer Lebensdauer erreicht haben.

Der Unterschied zwischen typedef struct und struct in C++ Der Unterschied zwischen typedef struct und struct in C++ May 01, 2024 am 11:36 AM

Der Unterschied zwischen typedef struct und struct: typedef struct erstellt einen Alias ​​eines Strukturtyps, während struct einen neuen Strukturtyp definiert. Der durch typedef struct erstellte Alias ​​kann nach der Deklaration verwendet werden, während die durch struct definierte Struktur nach der Definition verwendet werden kann. Weder typedef struct noch struct erzeugen zusätzlichen Speicherplatz.