解决编译错误:C4996:'GetMouseMsg': This function is deprecated.
2021-8-3 ~ 2021-9-14
(2)
问题概述
EasyX 提供了两个头文件:
- graphics.h
- easyx.h
easyx.h 包含最新的函数,并且删掉了旧函数。graphics.h 引用了 easyx.h,同时提供了对旧函数的支持。使用 graphics.h 里面提供的旧函数时,会收到一个 Warning C4996,例如使用旧函数 GetMouseMsg,会收到编译提醒:
C4996:'GetMouseMsg': This function is deprecated. Instead, use this new function: getmessage. See https://docs.easyx.cn/getmessage for details.
在过去,Visual C++ 默认会将 C4996 归类为 Warning。新版本 VC++ 默认会将 C4996 归类为 Error,导致无法编译。
解决方法
如果需要编译含有旧版本函数的代码,需要设置项目属性,不要把 C4996 当作 Error 即可。有两种方法设置,任选其一:
1. 使用代码设置
在代码前面增加一条预编译指令:
#pragma warning(default: 4996)
再次编译项目,之前的 error 会变成 warning,项目可以编译通过。
2. 修改项目设置
在 VS 的 Solution Explorer 里右击项目名称,选 Properties,在弹出的窗口中,设置 Configuration Properties -> C/C++ -> General -> SDL checks 为 No (/sdl-),如下图所示:
再次编译项目,会看到 C4996 会标记为 Warning,不影响编译。
建议
除非特殊情况,否则仍然推荐将旧函数替换为新版本的对应函数。新的鼠标消息处理函数功能更强大,使用更方便,请参考:https://codebus.cn/yangw/mouse-operation 。