1.用法不同:

typedef用于为数据类型定义别名,增强程序的可读性。例如,可以为结构体或枚举类型定义一个更易理解的名字。

#define主要用于宏定义,可以定义常量、表达式或其它代码片段的替换规则,它在预处理阶段进行简单的文本替换。

2.执行时间不同:

typedef是编译过程的一部分,在编译时处理,有类型检查的功能。

#define实在预处理阶段进行的(编译之前),只进行简单的字符串替换,不进行任何类型的检查。

3.作用域不同:

typedef有自己的作用域,通常限定在其定义的源文件中或者特定的块级作用域有效。

#define没有作用于限制,只要是在其声明后的引用都是正确的,除非使用#undef取消之前的定义。

4.对指针的操作不同:

使用typedef定义指针类型时更为直观和安全,因为它会为新的的类型创建一个真正的别名。

而使用#define来定义指针可能会导致一些不易察觉的错误,因为它只是简单的字符替换。

5.结尾符号不同:

typedef是一条完整的语句,所以需要在末尾加上分号;来表示结束。

#define不是一条语句,而是预处理指令,因此不能在末尾加分号;否则导致错误。

6.功能上的根本区别:

typedef是为一个已经存在的数据类型起一个新的名字,并没有创建新的数据类型,只是给原有的数据类型取了一个别名,使得代码更加易于理解和维护。

#define则是纯粹的文本替换,他的功能包括定义常量、插入指定的代码片段等,但它不具备类型安全性的保障。