Visual Studio:snprintf 冲突的宏定义

ant*_*nti 4 c++ printf visual-studio

我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)

根据谷歌的说法,这是因为snprintf自从编写此代码(2008 年)以来,Visual Studio 中已添加了 的定义。问题是,我在任何地方都找不到代码中的定义。包含的标题很多,我无法全部搜索。

有没有解决的办法?

还是我需要在旧版本的 VS 中构建?

rus*_*tyx 6

Visual Studio 14+ 定义snprintf_snprintfin stdio.h.

您的代码(或您包含的第 3 方代码)可能也以相同的方式定义它,因此它不起作用。

搜索这样的一行:

#define snprintf _snprintf
Run Code Online (Sandbox Code Playgroud)

并将其更改为:

#if _MSC_VER < 1900
#  define snprintf _snprintf
#endif
Run Code Online (Sandbox Code Playgroud)

如何在 Visual Studio 中搜索:

  • 编辑 -> 查找和替换 -> 在文件中搜索...(Ctrl+ Shift+ F
  • 找什么:
    #\s*define\s+snprintf
  • 查看:
    整个解决方案(包括外部项目)
  • 相符
  • 使用正则表达式
  • 找到所有...