typedef和define都是替一个对象取一个别名,以此增强程序的可读性,区别如下:
- 用法不同:typedef 用来定义一种数据类型的别名,增强程序的可读性。define 主要用来定义 常量,以及书写复杂使用频繁的宏。
- 执行时间不同:typedef 是编译过程的一部分,有类型检查的功能。define 是宏定义,是预编译的部分,其发生在编译之前,只是简单的进行字符串的替换,不进行类型的检查。
- 作用域不同:typedef 有作用域限定。define 不受作用域约束,只要是在define 声明后的引用 都是正确的。
- 对指针的操作不同:typedef 和define 定义的指针时有很大的区别。
「注意」:typedef 定义是语句,因为句尾要加上分号。而define 不是语句,千万不能在句尾加分号。
对于
define
来说,
宏定义实际上是在
预编译
阶段进⾏处理,没有类型,也就
没有类型检查
,仅仅做的是遇到宏定义进⾏字符串的展开,遇到多少次就展开多少次,⽽且这个简单的展开过程中,很容易出现
边界效应
,达不到预期 的效果。因为 define
宏定义仅仅是展开,因此运⾏时系统并不为宏定义分配内存,但是从汇编 的⻆度来讲,define 却以⽴即数的⽅式保留了多份数据的拷⻉。
对于
const
来说,
const
是在
编译期间进⾏处理的
,
const
有类型,也有
类型检查
,程序运⾏时系统会为
const
常量分配内存,⽽且从汇编的⻆度讲,const
常量在出现的地⽅保留的是真正数据的内存地址,只保留了⼀份数据的拷⻉,省去了不必要的内存空间。⽽且,有时编译器不会为普通的 const
常量分配内存,⽽是直接将
const
常量添 加到符号表中,省去了读取和写⼊内存的操作,效率更⾼。