Visual Studio:snprintf冲突的宏定义

时间:2018-08-17 14:10:27

标签: c++ visual-studio printf

我正在尝试使用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?

2 个答案:

答案 0 :(得分:2)

Visual Studio 14+在snprintf中将_snprintf定义为stdio.h

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

搜索这样的一行:

#define snprintf _snprintf

并将其更改为:

#if _MSC_VER < 1900
#  define snprintf _snprintf
#endif

如何在Visual Studio中搜索:

  • 编辑->查找和替换->在文件中搜索...( Ctrl + Shift + F
  • 查找内容:
     #\s*define\s+snprintf
  • 浏览范围:
    整个解决方案(包括外部项目)
  • 匹配案例
  • 使用正则表达式
  • 查找所有...

答案 1 :(得分:0)

解决方案正确,但根本原因是 版本14之前的Visual Studio不提供snprintf,因此我们使用了不合格的_snprintf。