您的位置:首页 > 其它

在类型定义时,请喜欢typedef而不是define

2006-09-01 09:52 405 查看
最近在code review的时候,有些程序员喜欢在定义自己类型的时候使用define而不是typedef,虽然看上去好像没有什么区别,其实在某些时候是十分令人烦恼的事情。请看下面的例子:
#define init8 char
#define pint8 char *
在使用的时候,他们往往可能出现这种情况
pint8 p = malloc( sizeof( int8 ) ); //ok,没有问题一切正常
或者
pint8 p1, p2;//想定义两个指针变量
p1 = malloc( sizeof( int8 ) ); //ok,没有问题
p2 = malloc( sizeof( int8 ) ); //编译错误,告诉你int8不能转化为pint8
我么可以把pint8的宏展开,就能知道出错的原因了。
char * p1, p2;简单吧,我们在定义的时候就是定义了两个变量,一个是char的指针变量,一个是char类型。所以在给p2进行初始化的时候编译就不能通过了。这个是宏定义自己类型变量的最大的坏处!所以我们会看到很多公司的程序使用中有一条狂傻的规则:在定义相同类型的变量的时候,我们要写成多行定义。比如说
pint8 p1, p2;//公司规则不通过
//一定要如下定义
pint8 p1;
pint8 p2;
晕菜,在很多临时变量的定义的时候,我们往往将他们定义在一起,否则会占用很多行代码,看上去也很简洁,难道不是吗?

所以我们会反思,为什么不用typedef来取代宏呢?
如果用typedef的话,上面所说的问题能够轻易被解决,难道不是吗?宏是好东西,但是不是什么地方都能贴的,要注意场合!
typedef char * pint8;
pint8 p1,p2;//ok,全是char类型的指针!

这里仅仅时说明了在定义自己类型的时候,typedef要比define好很多,但是并不是说typedef就能够取代宏,各自有自己的市场,要因地制宜的使用!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: