搜索
首页常见问题C语言中typedef和define有什么区别

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

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

char * s3,s4;

这意味着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        
 }

2、宏VS类型别名

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

#define N 10

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

3、将typedef作为类型别名

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

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

       typedef int arr [ 10 ] ;

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

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

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

以上是C语言中typedef和define有什么区别的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。