编译错误C3163:_vsprintf的属性声明不兼容
编译错误C3163:_vsprintf的属性声明不兼容问题
在昨天用VS2008和最新的V7.1SDK编译程序的ZLIB时候,出现了一个错误:
38> C:\Program Files\Microsoft VisualStudio 9.0\VC\include\stdio.h(358) : error C3163: '_vsnprintf': attributesinconsistent with previous declaration
38> C:\Program Files\MicrosoftVisual Studio 9.0\VC\include\stdio.h(350) : see declaration of '_vsnprintf'
看了一下,粗看之下,感觉到很奇怪,这可是VC自己的头文件的定义,难道还有错误,在发布的时候都没有发现吗?转念一想,编译别的程序的时候也用到了这个文件,怎么没有报错呢?这其中有什么古怪?
解决办法
在Gooogle上用“error C3163: '_vsnprintf':attributes inconsistent with previous declaration”作为关键词搜索了一下,很快找到了这个网址:http://hi.baidu.com/johnllon/blog/item/8b22a5074a8d06ce7b8947e0.html,描述了与我遇到的相同的问题,作者遇到了这个问题后已经解决了,原因是:
在使用vsnprintf这个函数的cpp文件中,包含了# define vsnprintf_vsnprintf的定义。在以前版本的vc中,没有定义vsnprintf,只定义_vsnprintf。而在2008版本中,添加了vsnprintf的定义。因此在编译的时候导致出现了上述错误。
解决的办法是针对vc2008前的vc定义宏:
#if (_MSC_VER < 1500)
#define vsnprintf _vsnprintf
#endif
页:
[1]