When I compile cocos2d-x (version 3.3) using visual studio 2015, an error occured, saying:
fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration (编译源文件 ..\base\s3tc.cpp)
The source code is:
#ifdef snprintf
#error Macro definition of snprintf conflicts with Standard Library
function declaration
#endif
Anybody can tell me what's wrong?
Until now, Many libraries & programs used snprintf()
function by defining it as _snprintf()
, since _snprintf()
was supported.
#define snprintf _snprintf
Finally, Visual Studio 14 defines snprintf()
!
Since, snprintf()
is now officially supported. We should never #define it.
Doing it will overshadow new snprintf()
function defined in stdio.h.
To restrict that, this is added in stdio.h
#ifdef snprintf
#error: Macro definition of snprintf conflicts with Standard Library function declaration”
#endif
Hence, your code doesn't compile.
It is true that on all previous versions of Visual Studio, you must use _snprintf()
function. But VS 2014 onwards you should not #define it with _snprintf()
.
Somewhere in your code or most likely in cocos
headers, this is done and hence the error.
Check that and remove that #define.
snprintf()
is part of C99 specifications.
To enable C99 support
add this in your program
#if _MSC_VER>=1900
# define STDC99
#endif
In case you don't know what _MSC_VER macro values are
...
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