为了账号安全,请及时绑定邮箱和手机立即绑定

怎样理解C语言define和typedef的使用?

怎样理解C语言define和typedef的使用?

MMMHUHU 2019-05-20 17:16:26
/常用数据类型定义*/#defineu8uint8_t#defineu16uint16_t#defineu32uint32_ttypedefunsignedcharuint8_t;typedefunsignedshortuint16_t;typedefunsignedlonguint32_t;根据上下文理解,我猜测下面两句意思是这样的:typedefunsignedcharunit8_t;#defineu8unit8_t;上一句是定义了一种unit8_t的新类型,类型其实是unsignedchar的别名。下一句是因为unit8_t太长了书写麻烦,所以定义了一个宏u8,其实还是调用的unit8_t。那么问题来了:1.按照程序初始化过程#defineu8unit8_t;typedefunsignedcharunit8_t;图中的代码是先#define后typedef的,是不是搞反了?2.两句能不能简写成一句?typedefunsignedcharu8
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

宏定义define对整个文件生效,当然选择定义在头部了,它会在整个文件里面对预定义的内容进行相应替换,简单来说,变异的时候并不会检查u8和uint8_t有没有定义,因为本质上来说它们并不算变量。所以,并没有和typedefunsignedcharunit8_t搞反一说。
两句能不能合成一句?答案是可以的,但是这样定义并不直观,过于精简的写法,有时候也并不是很好。
                            
查看完整回答
反对 回复 2019-05-20
?
慕村225694

TA贡献1880条经验 获得超4个赞

实际上,这2个语句并没有任何直接关系。
#define是宏定义,属于预处理阶段的东东。也就是说在预处理阶段,预处理器会把程序中的u8全部替换为uint8_t。typedef是类型定义,相当于定义了一个新类型uint8_t,如果你在代码中使用了uint8_t就必须定义了它。
总的来说,你只要在使用u8和uint8_t之前有typedefunsignedcharunit8_t即可
你当然可以那样写
                            
查看完整回答
反对 回复 2019-05-20
  • 2 回答
  • 0 关注
  • 573 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号