Maison >Problème commun >Quelle est la différence entre typedef et definition en langage C ?

Quelle est la différence entre typedef et definition en langage C ?

清浅
清浅original
2019-04-04 09:54:088118parcourir

La différence entre typedef et définir est la suivante : définir est un éditeur de prétraitement, et les macros définissables ont la possibilité d'être remplacées, tandis que typedef est traité par l'éditeur et suit les règles de portée, et peut être utilisé comme alias de type défini

#define est une directive C, qui est également un alias pour définir divers types de données similaires à typedef. Cependant, il existe encore des différences entre eux. Ensuite, je présenterai les différences entre eux en détail dans l'article, qui a un certain effet de référence.

Quelle est la différence entre typedef et definition en langage C ?

[Cours recommandé : Tutoriel sur le langage C]

1. préprocesseur Géré par le processeur, il copie et colle la valeur #define du point de définition au point d'utilisation. Le typedef est géré par le compilateur et constitue la définition réelle du nouveau type. Au moment où le contrôle atteint le compilateur, tous les #defines auront été remplacés.

L'impact des différences

(1) typedef doit se terminer par un point-virgule mais #define ne doit pas se terminer par un point-virgule
( 2) Il peut y avoir des effets secondaires de substitution dans #define, par exemple :

Le problème dans la deuxième déclaration est que le préprocesseur la remplacera par

   typedef char * string_t;         
   #define string_d char *        
   string_t s1,s2; // s1和s2都是char *类型        
   string_d s3,s4; // s3是char *但是s4的类型是char(而不是char *)
ce qui signifie s3 est de type char*, mais s4 sera de type char. Si vous souhaitez que toutes les variables soient des types pointeurs, toutes les variables doivent spécifier *

(3) typedef suit les règles de portée. Autrement dit, si un nouveau type est défini dans une portée (au sein d'une fonction), le nom du nouveau type sera affiché uniquement si la portée existe. Mais lorsque le préprocesseur rencontre un #define, il remplace toutes les occurrences (aucune règle de portée par la suite). Par exemple :
char * s3,s4;

2. Les alias de type Macros VS

 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        
 }

#define peuvent également être utilisés pour définir des macros, mais typedef ne peut être utilisé que pour fournir de nouveaux noms. pour les types existants (il ne peut pas créer de nouveaux types). De même, #define peut être utilisé pour définir la variable

qui ne définira pas réellement N, mais remplacera N par 10 dans tout le code. Il peut donc être utilisé pour des constantes nommées. Typedef ne peut fournir de nouveaux noms que pour les types définis

#define N 10
3. Utilisez typedef comme alias de type

Certaines définitions de types ne peuvent être définies qu'à l'aide de typedef et ne peuvent pas être utilisées #define définition. Exemple : (1) Attribuez un nouveau nom au tableau d'entiers de taille 10

(2) Attribuez un nouveau nom au type de structure

       typedef int arr [ 10 ] ;
Résumé : Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à tout le monde.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn