C++ Visual Studio:snprintf冲突的宏定义
我正在尝试使用visual studio 2017编译一些非常旧的代码。当我构建它时,我得到以下信息:C++ Visual Studio:snprintf冲突的宏定义,c++,visual-studio,printf,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 (
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年编写该代码以来,snprintf
的定义就被添加到了VisualStudio中。问题是,我在代码的任何地方都找不到定义。其中包含了许多标题,我无法全部搜索
有办法解决这个问题吗
还是我需要在旧版本的VS中构建 Visual Studio 14+在
stdio.h
中将snprintf
定义为\u snprintf
您的代码(或您包含的第三方代码)也可能以相同的方式定义它,因此它不起作用
搜索如下所示的行:
#define snprintf _snprintf
并将其更改为:
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
\if\u MSC\u VER<1900
#定义snprintf\u snprintf
#恩迪夫
如何在Visual Studio中搜索:
- 编辑->查找和替换->在文件中搜索。。。(Ctrl+Shift+F)
- 查找内容:
\s*define\s+snprintf
- 查看:
整个解决方案(包括外部项目) - 火柴盒
- 使用正则表达式
- 找到所有
- 解决方案是正确的,但根本原因是
Visual Studio第14版之前的版本不提供snprintf,因此我们使用了_snprintf,这是不一致的。在VS中进行递归目录搜索应该能够快速找到它。不是吗?问题是,我在代码里到处都找不到定义。其中包含许多标题,我无法全部搜索。-是时候使用更好的标记工具来查找名称了。
在VS
中进行递归目录搜索这是一个存在的函数吗?还是我需要写?找到了。非常感谢。