调试LZO项目时遇snprintf宏定义与标准库函数声明冲突问题
解决VS2015调试LZO项目时snprintf宏定义冲突问题
碰到这个问题我太熟了!我之前用CMake编译LZO原始代码后,调试VS项目lzo.sln时也遇到了一模一样的错误:
#error: Macro definition of snprintf conflicts with Standard Library function declaration
冲突原因
VS2015开始,微软已经在标准库中原生实现了snprintf函数,但LZO代码里的lzo_supp.h文件直接写了一行宏定义:
#define snprintf _snprintf
这就导致自定义宏和标准库的函数声明直接撞车,触发了编译器的错误提示。
解决方案
只需要把lzo_supp.h里的宏定义改成带条件编译的形式,确保只有在VS版本不支持原生snprintf时才启用这个宏:
#if (_MSC_VER < 1900) // VS2015对应的_MSC_VER版本号是1900 #define snprintf _snprintf #endif
或者用更通用的写法,直接检查snprintf是否未被定义:
#ifndef snprintf #define snprintf _snprintf #endif
改完之后重新编译项目,这个冲突错误就会消失。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

