一、typedef的用法
1、在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:
typedef int INT;
typedef char* Pchar;
typedef (int*) pINT;
typedef unsigned char uchar; // 将频繁使用且较长的类型定义一个别名
2、typedef的另外一类用法是某个类型的直接引用限制到一个地方。如:
typedef int int32;
typedef short int16;
当程序移植到一个sizeof(int)== 2的机器上时,只需要在代码中重新如下定义:
typedef long int32;
typedef int int16;
一定要明确的一点是:typedef只是用来定义其他类型的同义词(或者别名),而不是一个独立的类型。
typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。
二、#define的用法
#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编
译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题,#define的用法如下:
#define INT int //用INT代替int
#define TRUE 1 //用TRUE 1
#define Add(a,b) ((a)+(b));
#define Loop_10 for (int i=0; i<10; i++)
三、两者的区别
1、比较如下代码
Code 1:
typedef char* Pchar;
Pchar p1, p2;
则p1和p2都是char*类型的指针变量。
Code 2:
#define Pchar char*
Pchar p3, p4;
由于#define只是进行字符串替换,因此第二句相当于 char* p3, p4;即p3是char* 型变量,而p4则是char 型变量。
2、用#define做如下宏定义是一定注意加():
#define fun(a,b) ((a)*(b))
如果把宏定义写成:
#define fun(a,b) a*b
那么,如下代码段得到的值跟期望值会有出入:
int x=3,y=4,z=5,k=6;
int temp = fun(x+y,z+k);
则temp = 3+4*5+6 = 29不等于期望值(3+4)*(5+6)=77