C/C++中的typedef和#define

前言:
在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef用来为一个已有的数据类型起一个别名,而#define是用来定义一个宏定义常量。下面谈谈两者在实际使用中应当注意的地方。
1.typedef关键字
typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性。它可以为一串很长的类型名起一个别名,那么使用这个别名可以达到与原类型名相同的效果。
如:
typedef int INT; typedef char CHAR;
就为int和char分别起了一个别名,那么在程序中使用INT a;和int a;达到的效果是等同的。在使用typedef时应注意一下几点:
1)typedef是为一个数据类型起一个新的别名,如typedef int INT;那么要告诉我的是INT表示整型,typedef int* INTPTR;则告诉我们INTPTR是一个指向整型变量的指针类型,这点与#define是决然不同的,#define只是作简单的字符串替换,不表达任何含义。如:
#define INTPTR1 int* typedef int* INTPTR2; INTPTR1 p1,p2; INTPTR2 p3,p4;
INTPTR1 p1,p2;和INTPTR2 p3,p4;这两句的效果决然不同。INTPTR1 p1,p2;进行字符串替换后变成int* p1,p2;要表达的意义是声明一个指针变量p1和一个整型变量p2;而INTPTR2 p3,p4;由于INTPTR2是具有含义的,告诉我们是一个指向整型数据的指针,那么p3和p4都为指针变量,这句相当于int* p1,*p2;从这里可以看出,进行宏替换是不含任何意义的替换,仅仅为字符串替换;而用typedef为一种数据类型起的别名是带有一定含义的。
再看下面这个例子:
#define INTPTR1 int* typedef int* INTPTR2; int a=1; int b=2; int c=3; const INTPTR1 p1=&a; const INTPTR2 P2=&b; INTPTR2 const p3=&c;
上述代码中,const INTPTR1 p1表示p1是一个常量指针,即不可以通过p1去修改p1指向的内容,但是p1可以指向其他内容;而对于const INTPTR2 p2,由于INTPTR2表示是一个指针类型,因此用const去限定,表示封锁了这个指针类型,因此p2是一个指针常量,不可使p2再指向其他的内容,但可以通过p2修改其当前指向的内容,INTPTR2 const p3同样声明的是一个指针常量。
2)对于宏定义:
#define INT int unsigned INT a;
这种用法是可行的;
而
typedef int INT; unsigned INT a;
是绝对错误的用法。
2.#define宏定义
#define是一个宏定义命令,用来定义一个常量(包括无参常量和有参常量),它本身并不在编译过程中执行,而是在预处理阶段就已经完成了,因此不作任何正确性检查,只进行不关含义的字符串替换。在使用宏定义时,如果稍不注意就会发生错误,而且这个错误往往是你意想不到的。如:
#define ADD(a,b) a+b int i=1; int j=2; int k=3; int s=ADD(i,j)*k;
程序可能想求算的是(i+j)*k的结果,然而这段程序并没有达到这种效果,由于宏替换只是进行简单的字符串替换,那么ADD(i,j)*k相当于i+j*k,并不是想象中的(i+j)*k。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C/C++中的typedef和#define
# C++中的typedef和#define详细介绍
# 详解C++中typedef 和 #define 的区别
# 如何区分C++中的inline和#define宏
# C++中const与#define的利弊分析
# C/C++中宏定义(#define)
# 浅谈C++/C关于#define的那些奇奇怪怪的用法
# 是一个
# 的是
# 整型
# 可以通过
# 告诉我们
# 就会
# 是在
# 告诉我
# 是有
# 在实际
# 是用来
# 其他的
# 有一定
# 这段
# 希望能
# 仅为
# 几点
# 它可以
# 可以看出
# 不含
相关文章:
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
网站设计制作企业有哪些,抖音官网主页怎么设置?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何在七牛云存储上搭建网站并设置自定义域名?
如何在西部数码注册域名并快速搭建网站?
建站之星导航如何优化提升用户体验?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何配置IIS站点权限与局域网访问?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
如何在Windows 2008云服务器安全搭建网站?
大型企业网站制作流程,做网站需要注册公司吗?
南京网站制作费用,南京远驱官方网站?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
网站制作免费,什么网站能看正片电影?
创业网站制作流程,创业网站可靠吗?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何通过可视化优化提升建站效果?
如何通过建站之星自助学习解决操作问题?
名字制作网站免费,所有小说网站的名字?
,在苏州找工作,上哪个网站比较好?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何选择美橙互联多站合一建站方案?
Android使用GridView实现日历的简单功能
如何快速建站并高效导出源代码?
成都网站制作报价公司,成都工业用气开户费用?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何通过虚拟主机快速完成网站搭建?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
招商网站制作流程,网站招商广告语?
建站VPS配置与SEO优化指南:关键词排名提升策略
如何通过山东自助建站平台快速注册域名?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
开封网站制作公司,网络用语开封是什么意思?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何在万网开始建站?分步指南解析
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
html制作网站的步骤有哪些,iapp如何添加网页?
建站之星ASP如何实现CMS高效搭建与安全管理?
西安大型网站制作公司,西安招聘网站最好的是哪个?
*请认真填写需求信息,我们会在24小时内与您取得联系。