您的位置 首页 数字

typedef和define的介绍及本质区别

typedef和define的介绍及本质区别-对于都可以用来给对象取一个别名的Typedef和define来说,是有区别的。本文通过对typedef和define的介绍,来给读者详细的讲解它们存在的本质区别,供参考。 typedef 是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 # define 是预处理指令。下面让我们一起来看。 typedef是C语言语句,其功能是用户为已有数据类型取“别名”。 例如: typedef int INTEGER; 这以后就可用INTEGER来代替int作整型变量

关于都能够用来给方针取一个别号的Typedef和define来说,是有差异的。本文经过对typedef和define的介绍,来给读者具体的解说它们存在的本质差异,供参阅。

typedef是一种在计算机编程言语中用来声明自界说数据类型,合作各种原有数据类型来到达简化编程的意图的类型界说关键字。 #define是预处理指令。下面让我们一同来看。

typedef是C言句子子,其功用是用户为已有数据类型取“别号”。 

例如: 

typedef int INTEGER;  

这今后就可用INTEGER来替代int作整型变量的类型阐明晰,如:  

INTEGER a,b;   

用typedef界说数组、指针、结构等类型将带来很大的便利,不只使程序书写简略而且使含义更为清晰,因而增强了可读性。例如: 

typedef int a[10];//表明a是整型数组类型,数组长度为10。 

然后就可用a阐明变量,如:

a s1,s2;//彻底等效于:int s1[10],s2[10] ; 

同理 typedef void (*p)(void) 表明p是一种指向void型的指针类型!

#define是预处理中的宏界说指令,例如:

#define int PARA  

表明在源程序中的地点int将会被PARA原样替代! 

如:程序中有int a,b ;则在编译前将被替换为PAPA a,b;

#define是C中界说的语法,typedef是C++中界说的语法,二者在C++中能够通用,但#define成了预编译指令,typedef当成句子处理。Typedef和define都能够用来给方针取一个别号,可是两者却有着很大不同。

1. 首要,二者执行时间不同

关键字typedef在编译阶段有用,由所以在编译阶段,因而typedef有类型查看的功用。

Define则是宏界说,发生在预处理阶段,也便是编译之前,它只进行简略而机械的字符串替换,而不进行任何查看。

#define用法比如: 

#define f(x) x*x  

main( )  

{  

int a=6,b=2,c;  

c=f(a) / f(b);  

printf("%d n",c);  

程序的输出结果是: 36,根本原因就在于#define仅仅简略的字符串替换,应当加个括号“(X*X)”。

2. 功用不同

Typedef用来界说类型的别号,这些类型不只包含内部类型(int,char等),还包含自界说类型(如struct),能够起到使类型易于回忆的功用。 

如:

typedef int (*PF) (const char *, const char *); 

界说一个指向函数的指针的数据类型PF,其间函数返回值为int,参数为const char *。

typedef 有别的一个重要的用处,那便是界说机器无关的类型,例如,你能够界说一个叫 REAL 的浮点类型,在方针机器上它能够i取得最高的精度:

typedef long double REAL; 

在不支撑 long double 的机器上,该 typedef 看起来会是下面这样:

typedef double REAL; 

而且,在连 double 都不支撑的机器上,该 typedef 看起来会是这样:

typedef float REAL; 

#define不仅仅能够为类型取别号,还能够界说常量、变量、编译开关等。

3. 效果域不同

#define没有效果域的约束,只要是之前预界说过的宏,在今后的程序中都能够运用。而typedef有自己的效果域。

void fun()   

{   

#define A int   

}  

void gun()   

{   

//在这儿也能够运用A,由于宏替换没有效果域,   

//但假如上面用的是typedef,那这儿就不能用A ,不过一般不在函数内运用typedef  

4. 对指针的操作

二者润饰指针类型时,效果不同。

Typedef int * pint;  

#define PINT int *  

Const pint p;//p不行更改,p指向的内容能够更改,相当于 int * const p;  

Const PINT p;//p能够更改,p指向的内容不能更改,相当于 const int *p;或 int const *p;  

pint s1, s2; //s1和s2都是int型指针  

PINT s3, s4; //相当于int * s3,s4;只要一个是指针。 

其实,typedef和define结尾的标号也是不一样的,期望我们不要疏忽这一点。经过本文的剖析,相信你现已了解了这两者之间的差异。把握了差异之后,运用起来会愈加的灵敏。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/102891.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部