VS2017 #error: : snprintf 的宏定义与标准库函数声明冲突

VS2017 #error: : Macro definition of snprintf conflicts with Standard Library function declaration

本文关键字:标准 库函数 声明 冲突 宏定义 #error snprintf VS2017      更新时间:2023-10-16

我正在尝试使用VS2017构建一个在VS 2010中开发的应用程序。构建应用程序时,出现以下错误:

错误: : snprintf 的宏定义与标准库函数声明冲突

我试图像这里一样解决这个问题。但它在我的情况下不起作用。

我正在使用带有VS10社区15.8.2的Windows 10。

正如问题中的错误所示,您有一个不再与当前版本兼容的宏定义snprintf

因此,您需要查找以下内容:

#define snprintf _snprintf

您可以删除它,或者如果您还需要使用 Visual Studio 2010 编译代码,则可以添加以下条件:

#if _MSC_VER < 1700 
#define snprintf _snprintf
#endif

错误消息应该有助于告诉您哪个文件具有有问题的 #define。就我而言,这是错误的。CMAKE 正在添加一个标头(在我的情况下为my_config.h(,该标头不会通过跟踪错误代码直接显示。对#define snprintf进行解决方案广泛搜索_snprintf结果为零。

我是如何找到违规 #define 的:

  • 尝试构建。

  • 获取错误消息:#error:snprintf 的宏定义与标准库函数声明(编译源文件 D:\PathToFile\libmysql.c(冲突。 libmysql.c没有这样的定义,它包含的任何标头也没有。

  • 双击错误消息。这会在新选项卡中打开stdio.h,在生成错误的行(在我的例子中为 1914 行(。

    1906 #if defined snprintf
    1907     // This definition of snprintf will generate "warning C4005: 'snprintf': macro
    1908     // redefinition" with a subsequent line indicating where the previous definition
    1909     // of snprintf was.  This makes it easier to find where snprintf was defined.
    1910     #pragma warning(push, 1)
    1911     #pragma warning(1: 4005) // macro redefinition
    1912     #define snprintf Do not define snprintf as a macro
    1913     #pragma warning(pop)
    1914     #error Macro definition of snprintf conflicts with Standard Library function declaration
    1915 #endif
    
  • 将鼠标悬停在单词snprintf上,它检查定义(在我的例子中是第 1906 行(。智能感知将在工具提示中显示|>| #define snprintf _snprintf

  • 右键单击单词snprintf(不是工具提示(,然后单击">速览定义"或">转到定义"。这将弹出有问题的 #define 您现在可以根据需要删除或修改。

    493 #define ssize_t SSIZE_T
    494 #define strcasecmp _stricmp
    495 #define strncasecmp _strnicmp
    496 #define snprintf _snprintf // <-- Offending line.
    497 #define strtok_r strtok_s
    498 #define strtoll _strtoi64
    499 #define strtoull _strtoui64
    
  • 就我而言,违规行是 496,我只是删除了它。

  • 回到stdio.h并将鼠标悬停在snprintf单词上,它不应该再给你一个工具提示,因为它没有定义(我的也从紫色变成了白色(。