用 VS2008 编译 ucl-1.03 的问题
今天在用 VS2008 编译 SlOnline 的代码的时候,发现 ucl-1.03 的库不能编译了。用 OopsWare 已经编译好的版本就可以,自己编译就报错。提示的错误为
error C3163: '_vsnprintf': attributes inconsistent with previous declaration
OopsWare 使用的版本是 VS2008 Express Edition,我用的是 VS2008 Team Edition。感觉问题就是出在这里了。因为之前我用 VS2005 编译的时候也没有类似的问题。
最后查资料,应该是宏定义所导致的问题。找到 ucl-1.03 里面的 acc/acc-auto.h 这个文件,将源代码中第 436 行的代码
# define vsnprintf _vsnprintf
修改为
#if (_MSC_VER < 1500)
# define vsnprintf _vsnprintf
#endif
其中,_MSC_VER 表示 VC 编译器的版本号,1500 对应的是 VS2008。修改后,重新编译,问题解决!
2008-09-07 更新:
OopsWare 的 VC2008 Express 也有这个问题,不过他是通过修改 VC 自带的头文件来解决的