在类型定义时,请喜欢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就能够取代宏,各自有自己的市场,要因地制宜的使用!
#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就能够取代宏,各自有自己的市场,要因地制宜的使用!
相关文章推荐
- typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)---(转载)
- typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)---(转载)
- typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)
- typedef定义函数类型
- C++用typedef定义函数指针类型typedef可以用于定义函数指针类型
- 宏不是类型定义
- typedef和函数类型的定义
- 详解 用typedef定义类型
- Flex 1046: 找不到类型,或者它不是编译时常数;1180: 调用的方法 CompPropInfo 可能未定义
- typedef 在类里面定义一个类型时的问题。
- 宏定义#define和类型定义typedef区别
- typedef定义函数类型
- 使用typedef语句定义数组类型
- 使用typedef语句定义数组类型
- 使用typedef语句定义函数类型和函数指针
- 有关typedef定义新的类型名的作用
- C/C++学习笔记25:用typedef定义类型
- 【提醒】typedef定义数组类型时的语法
- 用typedef定义类型的总结分析
- 类型定义typedef