Visual Studio:snprintf的宏定义冲突问题

4

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

根据谷歌的说法,这是因为自2008年编写代码以来,Visual Studio已经添加了snprintf的定义。问题是,我无法在代码中找到该定义。由于包含了许多许多头文件,我无法搜索它们所有。是否有其他解决方法?还是我需要安装旧版本的VS?

在 VS 中进行递归目录搜索应该能够快速找到它。不是吗? - molbdnilo
问题是,我无法在代码中找到定义。有许多头文件被包含在内,我无法搜索它们所有的内容。现在是时候使用更好的标记工具来查找名称了。 - PaulMcKenzie
递归搜索目录在VS中。这是一个已经存在的函数吗?还是我需要自己编写它? - anti
2个回答

9

Visual Studio 14+将snprintf定义为_snprintfstdio.h中。

你的代码(或你包含的第三方代码)可能也以同样的方式定义它,因此它无法工作。

搜索像这样的一行:

#define snprintf _snprintf

将其改为:

#if _MSC_VER < 1900
#  define snprintf _snprintf
#endif

如何在Visual Studio中搜索:

  • 编辑 -> 查找和替换 -> 在文件中搜索... (Ctrl+Shift+F)
  • 查找内容:
    #\s*define\s+snprintf
  • 查找范围:
    整个解决方案(包括外部项)
  • 区分大小写
  • 使用正则表达式
  • 查找全部...

找到了。谢谢! - anti

0

解决方案是正确的,但根本原因是Visual Studio 14版本之前不提供snprintf函数,所以我们只能使用不符合标准的_sprintf函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接