Maison> Problème commun> le corps du texte

C语言中typedef和define有什么区别

清浅
Libérer: 2019-04-04 09:54:08
original
7875 Les gens l'ont consulté

typedef和define的区别有:define是预处理编辑器,可定义宏存在被替换的的可能性而typedef是由编辑器处理的,并且遵循范围规则,可用作定义类型别名

#define是一个C指令,它也是用于定义类似于typedef的各种数据类型的别名。但是它们之间仍存在差别,接下来在文章中具体为大家介绍它们之间的区别,具有一定的参考作用,希望对大家有所帮助

C语言中typedef和define有什么区别

【推荐课程:C语言教程

1、预处理器VS编译器

#define由预处理器处理的,它将#define值从定义点复制粘贴到使用点。而typedef是由编译器处理的,并且是新类型的实际定义。在控制将到达编译器时,所有#define都将被替换。

差异的影响

(1)typedef要以分号结束而#define不以分号结束

(2)#define中可能存在替换的副作用,例如:

typedef char * string_t; #define string_d char * string_t s1,s2; // s1和s2都是char *类型 string_d s3,s4; // s3是char *但是s4的类型是char(而不是char *)
Copier après la connexion

第二个声明中的问题是因为预处理器会将其替换为

char * s3,s4;
Copier après la connexion

这意味着s3是char *类型,但s4将是char类型。如果想要所有的变量都成为指针类型就所有变量必须指定*

(3)typedef遵循范围规则。即在范围内(函数内)定义了新类型,则只有范围存在时才会显示新类型名称。但是当预处理器遇#define时,它将替换所有出现的事件(之后没有范围规则)。例如:

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 }
Copier après la connexion

2、宏VS类型别名

#define也可用于定义宏,但是typedef只能用于为现有类型提供新名称(它不能创建新类型)。类似地,#define可以用来定义变量

#define N 10
Copier après la connexion

实际上是不会定义N,但是会在整个代码中将N替换为10。所以可以用于命名常量。而typedef只能为已定义的类型提供新名称

3、将typedef作为类型别名

某些类型定义只能使用typedef定义,而不能使用#define定义。例:

(1)给大小为10的整数数组赋一个新名称

typedef int arr [ 10 ] ;
Copier après la connexion

(2)为结构类型赋予新名称

typedef struct { int a; char b; } myType;
Copier après la connexion

总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!