C语言的宏定义#define与关键字typedef的区别详解

两者区别主要在于在三处不同

(1)与#define不同,typedef创建的符号名只受限于类型,不能用与值

#define   N   10      //将10替换为N,ok
#define   M   int     //将int替换为M,ok
typedef   int byte_4;  //将int重命名为byte_4,ok
typedef   4   num;     //将4重命名为num,error

(2)typedef由编译器解释,#define由预处理器处理

宏定义(#define)在预处理阶段完成,只是简单的字符串代换。

typede是可以用来做类型说明符的重命名的,在编译阶段完成的。

typedef char *pStr1;
#define pStr2 char *

pStr1 s1, s2;
pStr2 s3, s4;

在上面的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量。

在visual studio中可以看到下图的情形,根本原因就在于#define只是简单的字符串替换。

 

(3)typedef与#define的作用范围不同

typedef如果定义在函数中,就具有局部作用域,受限于定义所在的函数。如果定义在函数外面,就具有文件作用域。

#define可以出现在源文件的任何地方,其定义从指令出现的地方到该文件末尾有效。

关于#define的作用域可以查看 jo-qzy 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/boring_wednesday/article/details/78756696

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值