Ответ 1
До сих пор многие библиотеки и программы использовали функцию snprintf()
, определяя ее как _snprintf()
, поскольку поддерживается _snprintf()
.
#define snprintf _snprintf
Наконец, Visual Studio 14 определяет snprintf()
!
Так как snprintf()
теперь официально поддерживается. Мы не должны #define его.
Выполнение этой функции затмит новую функцию snprintf()
, определенную в stdio.h.
Чтобы ограничить это, это добавлено в stdio.h
#ifdef snprintf
#error: Macro definition of snprintf conflicts with Standard Library function declaration"
#endif
Следовательно, ваш код не компилируется.
Верно, что во всех предыдущих версиях Visual Studio вы должны использовать функцию _snprintf()
. Но VS 2014 вперед вы не должны # определять его с помощью _snprintf()
.
Где-то в вашем коде или, скорее всего, в заголовках cocos
это делается и, следовательно, ошибка.
Проверьте это и удалите этот #define.
snprintf()
является частью спецификаций C99.
Чтобы включить поддержку C99
добавьте это в свою программу
#if _MSC_VER>=1900
# define STDC99
#endif
Если вы не знаете, какие макросы _MSC_VER
...
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003)
MSVC++ 7.0 _MSC_VER == 1300
MSVC++ 6.0 _MSC_VER == 1200
MSVC++ 5.0 _MSC_VER == 1100
MSVC++ 4.0 _MSC_VER == 1000
MSVC++ 2.0 _MSC_VER == 900
MSVC++ 1.0 _MSC_VER == 800
C/C++ 7.0 _MSC_VER == 700
C 6.0 _MSC_VER == 600