永发信息网

单片机C语言中typedef和define的区别是什么?

答案:1  悬赏:70  手机版
解决时间 2021-03-11 05:13
单片机C语言中typedef和define的区别是什么?
最佳答案
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#define语句中的数字9 写成字母g 预处理也照样带入。

2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;

#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;

//refer to (xzgyb(老达摩))
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换

typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符

这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
typedef int * pint ;
#define PINT int *

那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。

pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象。

3)也许您已经注意到#define 不是语句 不要在行末加分号,否则 会连分号一块置换。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【我爱我家作文400字】我爱我家作文字数400字
孟州市飞宏服饰皮具城怎么去啊,有知道地址的
妈妈疲惫不堪()把句子写完整
中国马铃薯编辑部在哪里啊,我有事要去这个地
我想学机械制图有什么大学在这方面比较好的,
一些贺卡上的英语字体是什么字体,有点花样的,
下列收入项目中,属于村集体经济组织其他收入
北京欢迎你mv里在钟鼓楼的mm是谁?
三星note5怎么更换桌面的背景图片/壁纸
为什么深层地下水水质优于浅层地下水
流行美(宜州店)地址在哪,我要去那里办事
天宇五交化我想知道这个在什么地方
淘宝小二处理售后不公怎么办
家里没有5G的设备,可以关了5G的WIFI吗
大叶伞(就是我们平时说的招财树) 现在叶子
推荐资讯
久安庄村村地址在什么地方,想过去办事
64伏14安电瓶和48伏20安电瓶有什么区别
女主是叫卓颖 男主叫苏什么的 男二叫龙什么的
徐鹤宁演讲里面有一首欢快的歌曲叫什么名字和
千机汇手机卖场怎么去啊,有知道地址的么
请问广州天目通手机维修学校怎么样?
证券公司将其所管理的客户资产投资于一家公司
黄绿色和什么颜色搭配
练隶书还是练楷书好,隶书感觉很有味道大智若
轿车的机油可以两种混合使用吗?
莲山加油站在什么地方啊,我要过去处理事情
wacom intuos draw 和 intuos comic的区别
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?