define 与typedef大体功能都是使用时给一个对象取一个别名,增强程序的可读性,但它们在使用时有以下几点区别:
(1)原理不同
#define
是c语言的语法,是预处理阶段的指令,将程序的字符替换,不做正确性检查,define 不不是语句句,千万不不能在句句尾加分号。
typedef
是关键字,在编译时处理,有着类型检查功能,在自己的作用域里面给已经存在的类型一个别名,但是不能在一个函数里面定义typedef
定义是语句句,所以句句尾要加上分号。
(2)功能不同
typedef
用来定义类型的别名,起到类型易于记忆的功能。另一个功能是定义机器无关的类型。如定义一个REAL的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL。
#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等
(2)对指针不同
#define AAA int*
typedef int* BBB;
int(main)
{
int a =0 ;
int* p = &a;
BBB q = &a;
BBB p1,q1;
AAA p2,q2;
return 0;
}
variable | output(type) |
---|---|
p1 | int* |
p2 | int* |
q1 | int* |
q2 | other |