typedef 与#define 的区别
2014-09-08 19:34
351 查看
在 typede f和宏文本替换之间存在一个关键性的区别。正确思考这个问题的方法就是把typedef 看成是一种彻底“封装”类型——在声明它之后不能再往里面增加别的东西。它和宏的区别体现在两个方面。
typedef 所定义的类型名却不能这样做。如下所示:
typedef 定义的类型能够保证声明中所有的变量均为同一种类型,而用#define定义的类型则无法保证。如下所示:
经过宏扩展,第二行变为:
这使得 chalk 和 cheese 成为不同的类型,就好像是辣椒酱和细香葱的区别;chalk 是一个指向 int 的指针, 而cheese 则是一个 int。相反,下面的代码中:
Bentley 和 Rolls_Royce的类型依然相同。虽然前面的类型名变了,但它们的类型相同,都是指向 char 的指针。
区别一:
首先,可以用其它类型说明符对宏类型名进行扩展,但对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 的指针。
相关文章推荐
- typedef和#define的定义与区别
- typedef和#define的用法与区别
- typedef和#define的用法与区别
- typedef 和#define定义别名的区别
- typedef 和#define定义别名的区别
- #define和typedef的区别
- typedef和#define的区别
- typedef和#define的用法与区别
- typedef与#define 的区别
- typedef和#define的用法与区别
- #define和typedef的区别
- #typedef与#define的区别
- typedef和#define的主要区别
- typedef与#define 的区别
- typedef和#define的用法与区别
- typedef与#define区别
- typedef和#define的用法与区别
- Typedef和#define的区别
- typedef 和#define定义别名的区别
- typedef和#define的用法与区别