#pragma warning(disable:4996)是啥?

简介: #pragma warning(disable:4996)是啥?

含义:忽略warning4996


在使用VS 的开发者会遇到这样的问题,在使用std命名空间库函数的时候,往往会出现类似于下面的警告:


warning C4996: strcpy was declared deprecated


出现这样的警告,是因为VS 中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。


对于这些问题,VS 建议使用这些函数的更高级的安全版本,即在这些函数名后面加了一个_s的函数。这些安全版本函数使用起来更有效,也便于识别,如:strcpy_s,calloc_s等。


当 然,如果执意使用老版本、非安全版本函数,可以使用_CRT_SECURE_NO_DEPRECATE标记来忽略这些警告问题。


在“项目—>属性—>预处理器 —>预处理器定义“中添加_CRT_SECURE_NO_DEPRECATE即可。



或在程序开头添加


#pragma  warning(disable:4996)   // 全部关掉          
#pragma  warning(once:4996)      // 仅显示一个


扩展:#pragma warning


  1. #pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是对整个工程的所有文件有效。当该文件编译结束,设置也就失去作用。


  1. #pragma warning(push) 存储当前报警设置。


  1. #pragma warning(push, n) 存储当前报警设置,并设置报警级别为n。n为从1到4的自然数。


  1. #pragma warning(pop) 恢复之前压入堆栈的报警设置。在一对push和pop之间作的任何报警相关设置都将失效。


  1. #pragma warning(disable: n)将某个警报置为失效


  1. #pragma warning(default: n)将报警置为默认


  1. 某些警告如C4309是从上到下生效的。即文件内#pragma warning从上到下遍历,依次生效。


#pragma warning其他用法


开发人员可以使用 #pragma 指令将警告作为错误处理;还可以启用或禁用警告,如下面的示例所示:


1.将一个warning作为一个错误


#pragma warning (error: 6260)


2.将一个warning禁用掉


#pragma warning (disable: 6011)


3.将一个被禁用的warning启用


#pragma warning (enable: 6011)
相关文章
|
4月前
fix libpng warning: iCCP: Not recognizing known sRGB profile ......
本文介绍了如何解决在使用ImageMagick 7.1.0-13 q16 x64时出现的libpng警告:iCCP: 不识别已知的sRGB配置文件的问题。提供了一个批处理脚本,该脚本可以搜索子目录中的PNG文件并处理它们,以消除警告。文章还提供了脚本的位置和运行结果的截图。
|
4月前
|
存储 C++
C++ enable_shared_from_this
`std::enable_shared_from_this<>` 是 C++11 引入的模板类,用于安全地在类中创建 `std::shared_ptr` 实例。它解决了成员函数中直接创建 `std::shared_ptr` 导致的对象多次销毁和未定义行为问题。通过继承 `std::enable_shared_from_this<>` 并调用 `shared_from_this()` 方法,可以在类的成员函数中安全地获取当前对象的 `std::shared_ptr`。
|
小程序
小程序 define is not defined
小程序 define is not defined
173 0
You may use special comments to disable some warnings. Use // eslint-disable-next-line……
You may use special comments to disable some warnings. Use // eslint-disable-next-line……
error: static assertion failed: Signal and slot arguments are not compatible.
error: static assertion failed: Signal and slot arguments are not compatible.
error: static assertion failed: Signal and slot arguments are not compatible.
GLib-CRITICAL : g_variant_get_uint32: assertion ‘g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)
GLib-CRITICAL : g_variant_get_uint32: assertion ‘g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)
180 0
|
编译器
warning C4995: strcat name was marked as #pragma deprecated
warning C4995: strcat name was marked as #pragma deprecated
108 0