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