您的位置:首页 > 编程语言 > C语言/C++

typedef 与#define 的区别

2014-09-08 19:34 351 查看
在 typede f和宏文本替换之间存在一个关键性的区别。正确思考这个问题的方法就是把typedef 看成是一种彻底“封装”类型——在声明它之后不能再往里面增加别的东西。它和宏的区别体现在两个方面。

区别一:

首先,可以用其它类型说明符对宏类型名进行扩展,但对
typedef 所定义的类型名却不能这样做。如下所示:

#define peach intunsinged peach i;    /* 没问题  */
typedef int banana;unsigned banana i;   /* 错误!非法 */


区别二:

其次, 在连续几个变量的声明中,用
typedef 定义的类型能够保证声明中所有的变量均为同一种类型,而用#define定义的类型则无法保证。如下所示:

#define int_ptr int*int_ptr chalk, cheese;


经过宏扩展,第二行变为:

int* chalk, cheese;</textarea?


这使得 chalk 和 cheese 成为不同的类型,就好像是辣椒酱和细香葱的区别;chalk 是一个指向 int 的指针, 而cheese 则是一个 int。相反,下面的代码中:

typedef char * char_ptr;char_ptr Bentley, Rolls_Royce;


Bentley 和 Rolls_Royce的类型依然相同。虽然前面的类型名变了,但它们的类型相同,都是指向 char 的指针。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息