Maison >Problème commun >Quelle est la différence entre typedef et definition en langage C ?
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.
[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 :
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 103. 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 structuretypedef 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!