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?

清浅
清浅Original
2019-04-04 09:54:088119Durchsuche

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 *)

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

char * s3,s4;

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        
 }

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
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 ] ;

(2) Weisen Sie dem Strukturtyp einen neuen Namen zu

typedef struct {           
int a;            
char b;        
} myType;

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!

Stellungnahme:
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

In Verbindung stehende Artikel

Mehr sehen