我正在尝试使用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 kits10include10.0.17134.0ucrtstdio.h
根据谷歌的说法,这是因为自编写此代码以来(2008年(,snprintf
的定义已被添加到Visual Studio中。问题是,我在任何地方都找不到代码中的定义。包含许多标题,我无法搜索所有标题。
有没有办法解决这个问题?
还是我需要在旧版本的 VS 中构建?
Visual Studio 14+ 定义了snprintf
to_snprintf
instdio.h
。
您的代码(或您包含的第 3 方代码(可能也以相同的方式定义它,因此它不起作用。
搜索如下行:
#define snprintf _snprintf
并将其更改为:
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
如何在Visual Studio中搜索:
- 编辑 -> 查找和替换 -> 在文件中搜索...(按 Ctrl+Shift+F(
- 查找内容:
#s*defines+snprintf
- 查看范围:
整个解决方案(包括外部项目( - 匹配案例
- 使用正则表达式
- 查找全部...
解决方案是正确的,但根本原因是 版本 14 之前的 Visual Studio 不提供 snprintf,因此我们只能使用 _snprintf,这是不符合标准的。