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

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++小知识27——宏的几个小注意点  

2011-12-03 21:17:09|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这两天的工程里遇到了几个宏的小问题,记录下来,供大家一起分享和经验。
1、DEBUG_NEW
大家都知道在VC中如果使用DEBUG的话,会自动在程序的开始把#define new DEBUG_NEW定义,这个不细谈,只谈遇到的问题,也不知道谁在DEBUG_NEW后面多了一个点儿,对,英文的句号。new的时候儿就一直报语法错误,缺少“;”分号。同事找了会儿才找到这个原因,不过,在百度上搜到了,同样的现象,但不是同样的原因,那个是要求把这句话注释,同事注释掉后果然好了,但仔细一看,原来多一个点儿。人家网上那个没有,就是单纯这个错。
2、在火车上兄弟问我#define aa(a,b,c) (a=b+c;)这种宏定义,然后在工程里引用 aa(t,1,2);,注意后面有一个分号,他的原话是这两个分号去掉任意一个都可以使用,或者把宏定义中后面的小括号改成大括号。
当时没想到啥原因,回来加上/EP /P,在展开的*.i文件中看到,程序变成了如下这样:(t=1+2;);注意t = 1+2是个表达式,所以上面说的改成花括号是正确的。而小括号,则组成了一个逗号表达式,里面是不允许有分号的,因为分号代表一条语句结束了,那么你后面的单独一个小括号,是什么意思呢。这样写可能大家还是不太明白,看下面的:
t=(t=1+2,t*3);
这个就很明白无误的是一个逗号表达式,去掉分号或者将分号移动到小括号里面,程序都会报缺少分号或者不是预期的定义符。至此,两个小问题解决。

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

历史上的今天

评论

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

页脚

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