typedef和define的区别

本文详细探讨了C语言中#define和typedef的区别。typedef用于为已有类型创建别名,具备类型检查功能,作用域有限;而#define是预处理指令,进行文本替换,无类型检查和作用域限制。当与const结合时,typedef和#define会导致不同的结果。总结来说,typedef更安全,适合类型定义,而#define则更为灵活但需谨慎使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c语言中define和typedef的区别

define只是简单的文本替换,
typedef是声明一种新的类型,等同自带的基本类型。

总结:typedef和define可对一个对象进行 取别名(typedef) 或 字符替换(define) ,以此增强程序的可读性

typedef

typedef是关键字,对已经存在的数据类型取别名。
在编译阶段处理,会进行类型检查,只能在定义的作用域内使用。

define

define是预处理指令(宏定义),只进行简单的字符替换,是否产生错误要在编译时才可知。
没有作用域限制,可以对类型/变量/常量等进行替换

常见问题

  1. 与const组合
    typedef char* pstr;
    “const pstr p” 会被解释为“char* const p”:不能更改指向的地址(指针常量------地址是个常量,指针的内容是可以更改的)
    如果是define则会被解读为const char* p:指针指向一个常量,可以更改指向的地址。
  2. 作用域不同
int main()
{
  typedef int size;
  size a=3; //等同于int a =3;
  fun();
}

int fun()
{
    size a=3;  //报错
    //但如果上面用的是#define,那这里就可以用a,因为宏替换没有作用域
    
}


  1. define只是简单的字符串替换
#define PINT (int*)
void function_name PINT;
//把括号也算进去了
//效果等价于 void function_name (int*);
  1. 执行时间不同
    关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能
    #define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值