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; //等同于int a =3;
fun();
}
int fun()
{
size a=3; //报错
//但如果上面用的是#define,那这里就可以用a,因为宏替换没有作用域
}
- define只是简单的字符串替换
#define PINT (int*)
void function_name PINT;
//把括号也算进去了
//效果等价于 void function_name (int*);
- 执行时间不同
关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能
#define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查