Visual Studio:snprintf 冲突的宏定义



我正在尝试使用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+ 定义了snprintfto_snprintfinstdio.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,这是不符合标准的。

最新更新