type来自def和define具体的详细区过告争社德星功别
问题补充说明:请问typedef和define具体的详细区别,在UCOS-II中用的是typedef而没有用define,为什么呢,两者定义的内在空间有区别吗
区别如下:
(1)360问答原理不同
#define是C语言中定义的语法建还烟合田名,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。
typ深歌脸罗兵分edef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用悔答伏typedef定义数组、指针、结构等类型会带来很大的方便,不仅使程序书写简单,也使意义明确,增强可读性讲革先病写划叶动。
(2)功能不同
typed征贵宁团团模买民落ef用来定义类型的别名,起到类型易于记忆的功能。另一个功能是定义机器无关的类型。如定义一个REAL的浮点类型,在目标机器上么究袁策它可以获得最高的精度:typedeflongdoubleREAL,在不支持longdouble的机器上,看起来是这样的,typedefdoubleREAL,在不支持double的机器上,是这样的,typedeffl夫oatREAL
#define不只是可以为类型取别名,岁盾员程谁还可以定义常量、变量、编译开关等。
(3)作用域不同
#仅define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都击比变书可以使用,而typedef有自己的作用域。
(4)对指针的操作不同
#defi干异服肥例全价许neINTPTR1int*
typedefint*INTPTR2;
INTPT裂利角谁扩海继次跑R1p1,p2;
INTPTR2p3,p4;
含义分别为,
声明一个指针变量p1和一个整型变量p2
声明两个指成由针变量p3、p4
#defin传既观王知态针台地多eINTPTR1int*
typedefint*INTPTR2;
inta=1;
intb=2;
intc=3;
co步写nstINTPTR1p1=&a;
constINTPTR2p2=&b;
INTPTR2constp3=&c;
上述代码中,
constINTPTR1p1是一个常量指针,即不可以通过p1去修改p1指向的内容,但是p1可以指向号零导离置年乙歌学其他内容。
constINTPTR2p2是一个指针常量,不可使p2再指向其他内容。因为INTPTR2表示一个指针类型,因此用const限定,表示封锁了这个指针类型。
INTPTR2constp3是一个指针常量
扩展资料举枯:
define的作用:
被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。
宏定义的作用范围仅限于当前文件,即file1.c中定义#definePI3.14,在file2.c中该宏定义不起作用;通过将#definePI3.14定义在common.h中,file1.c和file2.c分别#include"common.h"的方式,该宏定义在file1.c和file2.c中都起作用。
在C或C++语碧携言中,“宏”分为有参数和无参数两种。
参考资料:
typedef-百度百科
标签:type,def,define