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

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

UNREFERENCED_PARAMETER宏  

2014-06-26 09:49:29|  分类: Windows编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Visual Studio中引入了这个有趣的宏,其作用是,阻止编译器警告未被使用的参数,通常,我们在自己编写的的代码中使用这个宏的机会并不多,但是,在Windows编程中,这个宏还是有点用的,例如,标准的Windows程序入口函数WinMain是这样定义的:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
这个函数中的hPrevInstance是16位中遗传下来的参数,由于在32位系统中使用了动态链接库等技术,这个参数已经变成废品了,现在都是直接给这个参数传递NULL。
但是这会在VS编译的时候带来一个警告,提示你有未被引用的变量,虽然这并不是什么很严重的事情,但是对于有强迫症的程序员而言,这也是一件让人很不舒服的事情,如何解决呢?一种方法是,实现函数的时候,直给出参数类型,而不提供变量名,这有点像函数声明时不需要变量名一样,上面的函数在使用时可以改为这样:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nShowCmd)
{
    //your code here
}
这样就不会有这个恼人的警告了,不要觉得程序不会通过编译,C/C++编译器远比我们聪明,^_^。因为对于编译器而言,变量叫什么真的不重要,重要的是函数签名(再啰嗦一句,返回值类型不属于函数签名的一部分,因此也不重要,你可以用任何方式解读返回值)。
另外一种方法就是使用这个宏,对于上面的例子,还可以这样写:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(nShowCmd);
    //your code here
}
这样也可以让编译器闭嘴。
最后,UNREFERENCED_PARAMETER宏不仅可以作用于函数的形参,也可以对局部变量产生效果,感兴趣的童鞋可以自行测试一下。不过对于全局变量,即使你从来不用,编译器也不会抱怨,看来编译器对全局变量挺照顾的。
  评论这张
 
阅读(405)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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