gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:03 30 4
gpt4 key购买 nike

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

当我在 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++。

最佳答案

正如@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

关于c - 检测 Visual C++ 中存在哪个版本的 vswprintf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15519381/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com