У меня есть проект, который использует _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++, если это имеет значение.
_vstprintf_s()
, кажется, работает правильно в VS2008, VS2010 и VS2012. - person hippietrail   schedule 20.03.2013