我正在尝试使用Visual Studio 2017编译一些非常旧的代码。构建它时,我得到以下信息:
Error C1189 #error: Macro definition of snprintf conflicts with Standard Library function declaration
(compiling source file ordeviceinput_device.cxx) ordeviceinput
c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h
据Google称,这是因为自编写此代码(在2008年)以来,snprintf
的定义已添加到Visual Studio中。问题是,我在任何地方的代码中都找不到定义。其中包含许多头文件,我无法全部搜索它们。
有没有解决的办法?
还是我需要构建旧版本的VS?
答案 0 :(得分:2)
Visual Studio 14+在snprintf
中将_snprintf
定义为stdio.h
。
您的代码(或您包括的第三方代码)也可能以相同的方式定义它,因此它不起作用。
搜索这样的一行:
#define snprintf _snprintf
并将其更改为:
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
如何在Visual Studio中搜索:
#\s*define\s+snprintf
答案 1 :(得分:0)
解决方案正确,但根本原因是 版本14之前的Visual Studio不提供snprintf,因此我们使用了不合格的_snprintf。