1

我有一个项目,它使用_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++,如果这有所不同的话。

4

1 回答 1

1

正如@Roger Rowland 所说,由于 Visual Studio 2008 http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/b385ed64-d549-4cf3-af31-85a2e8da4b6a/中的一个错误, 您应该通过 3 Visual Studio 2008 中的参数和较新版本中的 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
于 2014-11-22T21:10:35.603 回答