关于都能够用来给方针取一个别号的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结尾的标号也是不一样的,期望我们不要疏忽这一点。经过本文的剖析,相信你现已了解了这两者之间的差异。把握了差异之后,运用起来会愈加的灵敏。