检测Visual C ++中存在哪个版本的vswprintf()

时间:2013-03-20 09:13:22

标签: c visual-c++ tchar printf

我有一个项目使用_vscwprintf() / vswprintf()(通过_vsctprintf() / _vstprintf())在malloc()个缓冲区中创建任意长度的格式化字符串。

当我在Visual C ++ 2008下启动项目时,_vstprintf()采用了三个参数:

int vswprintf(wchar_t * _String, const wchar_t * _Format, va_list _Ap)

但是在我使用Visual C ++ 2012回到它之后离开我的项目一段时间后,我发现MS已经将函数更改为采用四个参数:

int vswprintf(wchar_t * _String, size_t _Count, const wchar_t * _Format, va_list _Ap)

我希望我的代码可以在Visual C ++ 2008,2010和2012下构建(它也可以移植到Linux和Solaris)。

我可以使用#ifdef检查一些符号,以便我可以使用函数的3参数或4参数版本正确构建吗?

我假设有一个符号告诉我正在编译哪个版本的Visual C ++,但这是正确的方法吗?例如,是否有可能新的编译器可以使用较旧的C库或运行时构建,反之亦然?

我的代码实际上是使用C而不是C ++,如果这有所不同。

1 个答案:

答案 0 :(得分:1)

正如@Roger Rowland所说,由于Visual Studio 2008中的一个错误http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/b385ed64-d549-4cf3-af31-85a2e8da4b6a/ 你应该在Visual Studio 2008中传递3个参数,在新版本中传递4个参数

#ifdef _MSC_VER <= 1500 //Visual Studio 2008 or ealier
// use 3 parameters version here
#else //later than Visual Studio 2008
// use 4 parameters version herse
#endif