#define和typedef的使用误区

 

一、#define使用误区

(1)宏不是函数

eg:#define  abs(x)   ((x)>=0?(x) : -(x))      //好的定义方法

()是必须的,他们的作用是预防引起与优先级有关的问题。例如:我们定义宏:

      #define  abs(x)  x>=0?x: -x                   //不好的定义

看看abs(a-b)求值的结果:

      a-b>=0?a-b:-a-b

而不是我们要的:a-b>=0?a-b:-(a-b)

看看abs(a)+1求值的结果:

      a>=0?a:-a+1

而不是我们要的:(a>=0?a:-a)+1    

(2)宏不是类型定义

eg:  #define   char*   str

看看str  a,b;展开的结果:

     char   *a,b;

而不是我们要的:char  *a,*b;

typedef可以实现

更多内容参考《C陷阱与缺陷》

 

二、typedef使用误区

(1)typedef不允许“组合”

定义:typedef  int    INT32;

不允许这样用:unsinged  INT32   a;               //错误

使用#define就没这个问题,因为它只是简单的展开

(2)

定义:typedef   char*   str;

这样使用:const  str  s;

s是:const   char*  s;           //s是一个指向const   char的指针

还是:char * const  s;       //s是一个指向char的const指针

答案是后者,因为当用typedef定义了一种新的类型str后,const修饰的对象就是str,二str本身是指针,于是const   str的意思就是str的值是常量,即str是常量指针。

更多内容参考《c/c++深层探索》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值