【C/C++】#define用法 及 与typedef 的区别

本文深入探讨C语言预处理器指令#define的用法与潜在陷阱,包括其作为简单字符串替换的功能,如何模仿函数行为,以及与typedef的区别。通过实例说明#define在实际编程中可能引发的问题,如意外的运算符优先级和不正确的类型定义。

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

1.define定义

define的定义更像是简单的字符串替换而不是作为一个量来使用,这个问题在下面反映的尤为突出。

2.define的“函数定义”

define可以像函数那样接受一些参数,如下
     #define  max(x,y)  (x)>(y)?(x):(y);

3.存在隐患

当通过如下方式定义时,#define Add(a,b) a+b;

此处c * Add(a,b) * d语句真实的形式为c*a + b*d而不是c*(a+b)*d

原因是define只是简单的进行符号替换,使用的时候,将原表达式放进来,不会有其它逻辑含义,切记,此处仅仅是符号替换!!!

4.define和typedef的区别:

再次强调!:#define只是简单的字符串替换,而typedef则是为一个类型起个别名。

例子:

typedef char *pStr1;     //此处为char*取一个别名 pStr1。
#define pStr2 char *;   //此处只是简单的符号替换
pStr1 s1, s2;     //所以这里等同于char* 定义了两个变量s1,s2
pStr2 s3, s4;    //而这里只是简单的替换为pStr2 *s3,s4;  所以此处定义的为一个字符指针s3和字符类型变量s4。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值