Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual Studio:snprintf冲突的宏定义_C++_Visual Studio_Printf - Fatal编程技术网

C++ Visual Studio:snprintf冲突的宏定义

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 (

我正在尝试使用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年编写该代码以来,
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
      中进行递归目录搜索这是一个存在的函数吗?还是我需要写?找到了。非常感谢。