我正在尝试使用VS2017构建在VS 2010中开发的应用程序。在构建应用程序时,出现以下错误:
错误:: snprintf的宏定义与标准库函数声明冲突
我尝试解决here之类的问题。但这对我来说不起作用。
我正在将Windows 10与VS2017社区15.8.2一起使用。
答案 0 :(得分:2)
问题中的错误表明,您为snprintf
定义了一个宏,该宏定义不再与当前版本兼容。
因此,您需要查找以下内容:
#define snprintf _snprintf
您可以删除它,或者如果您还需要使用Visual Studio 2010编译代码,则可以添加以下条件:
#if _MSC_VER < 1700
#define snprintf _snprintf
#endif
答案 1 :(得分:0)
该错误消息应该有助于告诉您哪个文件包含有问题的 #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(不是工具提示),然后单击 Peek Definition 或 Go To Definition。这会弹出有问题的 #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 词上,它应该不再给你提示,因为它没有定义(我的也从紫色到白色)。