注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

C的缺陷-pitfalls总结(三)  

2014-07-29 22:44:12|  分类: 学习录 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

6、宏的使用


宏是个很有用的预处理器类型,比如,我可以这样用:

#define STRU_VAR struct var

...

STRU_VAR x,y;

...

这样在以后的程序中都可以使用 STRU_VAR 来 struct var 这样的结构体定义了。

增强了程序的可移植性。但是如果是在结构体后面再定义一个指针类型的名字呢?

比如:

#define STRU_VAR1 struct var *

...

STRU_VAR1 x,y;

扩展之后就是 struct var *x,y;

x是一个指向结构体的指针,而y呢,只是一个结构,并非指针形式,所以在定义多个变量的时候最好不要用宏的方式。

推荐用 typedef

typedef STRU_VAR2 struct var *;

...

STRU_VAR2 x,y;

用 typedef 定义,从概念上是完全一样的,但是用 typedef 定义多个变量时就不会出现上述情况。

与上面情况类似但不合法的一种情况就是:

#define inst int

unsigned inst i; //这是合法的

 

typedef int insd;

unsigned insd i; //非法的


说到这里就不得不说下 typedef 了。typedef 不是引入了新类型,而是为现有的类型取个新名字。当用在结构时,除了在书写时可以省掉 struct 关键字外,并没有其他好处。下面的例子:

typedef struct tag {int i;} type;

struct tag var1;

type var2;


tag 表示结构标签,type 表示结构类,typedef type作 struct tag {int i;} 的简写形式,那么第三号表示就是正确的,而tag var3; 就不是合法的表示。

那么typedef 用在哪些地方呢?

   数组、结构、指针及函数的组合类型。

     可移植类型,比如说某个十几个比特以上的类型,这时候用typedef 就比较方便了。typedef 也可以为后面的强制类型转换提供一个简单的名字。

  评论这张
 
阅读(43)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017