最近在 PC 上需要生成一个二维码图片,准备使用 libqrencode 这个 QR 二维码生成库。Windows 下有一个它的移植版本 qrencode-win32,除了有源代码以外,还有一个 Windows 下的应用程序,可以直接用来生成 QR 二维码。

我使用的是 libqrencode 3.4.2 版本,对应于 Windows 下的版本是使用 VC8 来构建工程的,而我本地只有 VC9 的版本,我升级工程后进行编译,提示如下错误:

Error   2       error C3163: '_vsnprintf': attributes inconsistent with previous declaration    c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h   358

这是因为在 VC9 CRT 里已经定义了 vsnprintf 这个函数,而在 VC8 里却没有,所以在很多 VC8 或更早的代码里,会添加类似下面的定义:

#define vsnprintf _vsnprintf

对于 libqrencode 来说,也是这个问题,只需要把 config.h 里的这一句代码注释掉即可。

如果还需要在 VC8 和 VC9 里使用,则可以使用下面的方式来灵活定制:

#if     _MSC_VER < 1500
#define vsnprintf _vsnprintf
#endif