c语言中define和typedef的区别
define只是简单的文本替换, typedef是声明一种新的类型,等同自带的基本类型。
总结:typedef和define可对一个对象进行 取别名(typedef) 或 字符替换(define) ,以此增强程序的可读性
typedef
typedef是关键字,对已经存在的数据类型取别名。 在编译阶段处理,会进行类型检查,只能在定义的作用域内使用。
define
define是预处理指令(宏定义),只进行简单的字符替换,是否产生错误要在编译时才可知。 没有作用域限制,可以对类型/变量/常量等进行替换
常见问题
- 与const组合
typedef char* pstr; “const pstr p” 会被解释为“char* const p”:不能更改指向的地址(指针常量------地址是个常量,指针的内容是可以更改的) 如果是define则会被解读为const char* p:指针指向一个常量,可以更改指向的地址。 - 作用域不同
int main()
{
typedef int size;
size a=3;
fun();
}
int fun()
{
size a=3;
}
- define只是简单的字符串替换
#define PINT (int*)
void function_name PINT;
- 执行时间不同
关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能 #define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查
|