Jar*_*red 36 c++ cocos2d-x visual-studio-2015
当我使用visual studio 2015编译cocos2d-x(版本3.3)时,发生错误,说:
致命错误C1189:#error:snprintf的宏定义与标准库函数声明冲突(编译源文件..\base\s3tc.cpp)
源代码是:
#ifdef snprintf
#error Macro definition of snprintf conflicts with Standard Library
function declaration
#endif
Run Code Online (Sandbox Code Playgroud)
谁能告诉我什么是错的?
use*_*er1 61
到目前为止,许多库和程序都使用snprintf()
函数_snprintf()
,因为它_snprintf()
被支持.
#define snprintf _snprintf
Run Code Online (Sandbox Code Playgroud)
最后,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
Run Code Online (Sandbox Code Playgroud)
因此,您的代码无法编译.
确实,在所有以前版本的Visual Studio中,您必须使用_snprintf()
函数.但是VS 2014以后你不应该#define它_snprintf()
.
在代码中的某个地方或最有可能在cocos
标题中,这已经完成,因此错误.
检查并删除#define.
snprintf()
是C99规格的一部分.
启用C99支持
在你的程序中添加它
#if _MSC_VER>=1900
# define STDC99
#endif
Run Code Online (Sandbox Code Playgroud)
如果您不知道_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
Run Code Online (Sandbox Code Playgroud)
小智 5
只需snprintf
在代码中找到 的定义并在 on 时取消定义即可VS2015
。
就像是:
#if _MSC_VER < 1900 //vs2015 already have this function
#define snprintf _snprintf_s
#endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35427 次 |
最近记录: |