简述:关于 VS20XX 中出现 _CRT_SECURE_NO_WARNINGS 及 _SCL_SECURE_NO_WARNINGS 的安全警告处理。
1、简单介绍.pro跨平台(Win32/Linux)的写法
win32 {
#remove safe warningwin32:DEFINES += _CRT_SECURE_NO_WARNINGS _SCL_SECURE_NO_WARNINGSLIBS += -lGLU32 -lpthreadVC2#Forbid C4819 and C4244 WarningQMAKE_CXXFLAGS += /wd"4819"\/wd"4244"
}unix {
LIBS += -lGLU}
即写法如下:
win32 {
#设置WIndows下的连接库,以及Visual C++20XX编译器的的设置选项}unix {
#原理和win32一样}
2、 Qt 的解决方法
在win32中,win32:DEFINES+=_CRT_SECURE_NO_WARNINGS,主要就是添加_CRT_SECURE_NO_WARNINGS定义,避免VC编译器关于fopen等应使用fopen_s的安全警告,而win32:DEFINES+=_SCL_SECURE_NO_WARNINGS同理。QMAKE_CXXFLAGS+=/wd"4819"的作用就是屏蔽C4819警告,需要注意的是,在.pro文件中定义的均为全局配置。
3、VS20XX的解决方法
问题:1>c:\program files (x86)\microsoft visual studio11.0\vc\include\xutility(2176): error C4996: 'std::_Copy_impl': Function callwith parameters that may be unsafe - this call relies on the caller to checkthat the passed values are correct. To disable this warning,use-D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'CheckedIterators'
问题:Error 1 error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
解决方法:
加入预处理器(项目属性----C/C++----预处理----预处理器定义):
_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS