#pragma warning (default : n)
参考链接:http://www.cnblogs.com/JCSU/articles/1996483.html
在VC2013中编译以下win32 C++ 控制台程序,会产生2个告警warnings
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[])
{
int x, y, z;
y = x;
//return 0;
}
警告 1 warning C4101: “z”: 未引用的局部变量
错误 2 error C4700: 使用了未初始化的局部变量“x”
如果不希望这些告警出现,可以使用#pragma指令:
#include "stdafx.h" #pragma warning(disable:4101 4700) int _tmain(int argc, _TCHAR* argv[])
{
int x, y, z;
y = x;
//return 0;
}
编译结果中就不会出现警告和错误提示了。
百度中给出的答案:
1.#pragma warning(disable: n)
将某个警报置为失效
2.#pragma warning(default: n)
将报警置为默认,在上面的例子中用 #pragma warning(default:4700) 后编译出现两个警告,4700的错误不再是错误而变成警告提示。
用 #pragma warning(default:4101) 与未设置的编译结果相同。
用 #pragma warning(default:4996) 与未设置的编译结果相同。
结论:#pragma warning(default: n) 只是将相应的错误变成警告了。
参考链接:http://blog.csdn.net/wowolook/article/details/8060334
关于这个预处理指令的MSDN 链接:https://msdn.microsoft.com/zh-cn/library/vstudio/d9x1s805%28v=vs.110%29.aspx
关于C++编译器的错误号列表链接:https://msdn.microsoft.com/zh-cn/library/8x5x43k7%28v=vs.80%29.aspx
1 常用去警告:
#pragma warning(disable:4068) // unknown pragma
#pragma warning(disable:4201) //nonstandard extension used : nameless struct/union
#pragma warning(disable:4267)
#pragma warning(disable:4018) //signed/unsigned mismatch
#pragma warning(disable:4127) //conditional expression is constant
#pragma warning(disable:4146)
#pragma warning(disable:4244) //conversion from 'LONG_PTR' to 'LONG', possible loss of data
#pragma warning(disable:4311) //'type cast' : pointer truncation from 'BYTE *' to 'ULONG'
#pragma warning(disable:4312) //'type cast' : conversion from 'LONG' to 'WNDPROC' of greater size
#pragma warning(disable:4346) //_It::iterator_category' : dependent name is not a type
#pragma warning(disable:4786)
#pragma warning(disable:4541) //'dynamic_cast' used on polymorphic type
#pragma warning(disable:4996) //declared deprecated ?
#pragma warning(disable:4200) //zero-sized array in struct/union
#pragma warning(disable:4800) //forcing value to bool 'true' or 'false' (performance warning)
2 常用用法:
#pragma warning( disable:XXXX) //
需要消除警告的代码
#pragma warning( pop )
or:
#pragma warning(disable:XXXX)
需要消除警告的代码
#pragma warning(enable:XXXX)// 如果出现:'enable ' not valid specifier 用 #pragma warning(default:XXXX) 代替试试
3 网上资料:
开发人员可以使用 #pragma 指令将警告作为错误处理;还可以启用或禁用警告,如下面的示例所示:
#pragma warning (error: 6260)
#pragma warning (disable: 6011)
#pragma warning (enable: 6056)
- 和#pragma warning (default : 4996)
是干啥用的呢?1.#pragma warning(disable: n)
将某个警报置为失效
2.#pragma warning(default: n)
将报警置为默认 - 使用VS2005,编译提示"xxxxxx被声明为否决的
这是MS新的C库提供的带有检查的函数,有内存溢出检测。可以防止一部分程序bug, 抵制缓冲区溢出攻击(buffer overflow attack). 但是应该速度上有牺牲。
解决办法
1.所以在你确信安全的情况下,可以用#pragma warning(disable: 4996)消除这个警告
2.建议使用_s的缓冲区安全的版本,而不是简单的屏蔽警告。 - #pragma warning (disable: 4996) // 太多警告看着厌烦无视之
- 关于#pragma warning
1.#pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是是对整个工程的所有文件有效。当该文件编译结束,设置也就失去作用。
2.#pragma warning(push) 存储当前报警设置。#pragma warning(push, n) 存储当前报警设置,并设置报警级别为n。n为从1到4的自然数。
3.#pragma warning(pop) 恢复之前压入堆栈的报警设置。在一对push和pop之间作的任何报警相关设置都将失效。
4.#pragma warning(disable: n) 将某个警报置为失效
5.#pragma warning(default: n) 将报警置为默认
6.某些警告如C4309是从上到下生效的。即文件内#pragma warning从上到下遍历,依次生效。
例如:
void func()
{
#pragma warning(disable: 4189)
char s;
s = 128;
#pragma warning(default: 4189)
char c;
c = 128;
}
则s = 128不会产生C4309报警,而C4309会产生报警。 - 7.某些警告例如C4189是以函数中最后出现的#pragma warning设置为准的,其余针对该报警的设置都是无效的。
例如:
void func()
{
#pragma warning(disable: 4189)
int x = 1;
#pragma warning(default: 4189)
}
则C4189仍然会出现,因为default指令是函数的最后一条。在该文件内的其他函数中,如果没有重新设置,C4189也是以#pragma warning(default: 4189)为准。如果重新设置,同样是按照其函数中的最后一个#pragma warning为准。 - 8.某些警告(MSDN认为是大于等于C4700的警告)是在函数结束后才能生效。
例如:
#pragma warning(disable:4700)
void Func()
{
int x;
int y = x;
#pragma warning(default:4700)
int z= x;
}
则y = x和z = x都不会产生C4700报警。只有在函数结束后的后的另外一个函数中,#pragma warning(default:4700)才能生效。
#pragma warning (default : n)的更多相关文章
- #pragma CODE_SEG __NEAR_SEG NON_BANKED/#pragma CODE_SEG DEFAULT
在写到SCI 中断发送,中断接收程序的时候,在程序中会出现#pragma CODE_SEG __NEAR_SEG NON_BANKED/#pragma CODE_SEG DEFAULT,这两句话在程序 ...
- #pragma warning 启用和禁用warning
开发人员可以使用 #pragma 指令将警告作为错误处理:还可以启用或禁用警告,如下面的示例所示: 1.将一个warning作为一个错误 #pragma warning (error: 6260) 2 ...
- C++写#pragma warning(disable 4786)的作用
C++编程时,在使用STL(C++标准模板库)的时候经常引发类似的错误,尤其是vector,map这类模板类,模板中套模板,一不小心就很长了. 当命名超过C++规定范围255字符时,就会产生这个名为d ...
- #pragma warning(disable 4786)
#pragma warning(disable 4786) 此warning产生的原因是因为标识符过长,超过了最大限定255个字符类名超过了255个字符,使用时就会报4786的waring. 在使用S ...
- C# #pragma warning disable/restore
#pragma warning 可以启用或禁用特定警告. 语法 #pragma warning disable warning-list #pragma warning restore warning ...
- Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma warning(C# 参考)
ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma warning(C# 参考) 1.返回顶部 1. #pragma warning(C# 参考) 2015/07/ ...
- #pragma warning(disable:4996)
VS使用中常常会遇到一些过时或者不安全的函数,编译会报错: 错误 C4996 'sscanf': This function or variable may be unsafe. Consider u ...
- #pragma详解
在#Pragma是预处理指令它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有 ...
- #pragma预处理命令详解
#pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma指令: #pragma comment(lib,"XXX.lib") ...
随机推荐
- C# Winform 涉及的拖放操作总结
在开发程序的时候,为了提高用户的使用体验,或满足相关用户的功能,总是离不开拖放功能.而本文是总结winform下的常用拖放操作.主要有 1.textbox接受拖放的文件2.listbox允许用户自定义 ...
- springMVC从上传的Excel文件中读取数据
示例:导入客户文件(Excle文件) 一.编辑customer.xlsx 二.在spring的xml文件设置上传文件大小 <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1 ...
- [DP] 堆盒子问题
给一堆盒子,知道每个盒子的三围(长宽高),盒子正面朝你,不能旋转摆放,按照大的放在小的下面的原则堆起来,必须是 strictly larger,同样大小的盒子不行,问怎么样堆到最大的高度? 思路:动态 ...
- Good Bye 2015B
Problem B:http://codeforces.com/contest/611/problem/B B. New Year and Old Property 题意:问输入的年份a到b中转化为二 ...
- 配置JAVA的环境变量
下面开始配置环境变量,右击[我的电脑]---[属性]-----[高级]---[环境变量],如图: 选择[新建系统变量]--弹出“新建系统变量”对话框,在“变量名”文本框输入“JAVA_HOME”,在“ ...
- 快速配置Ehcache
1. 编写ehcache.xml文件,将该文件放置于classpath路径下.代码如下: <?xml version="1.0" encoding="UTF-8&q ...
- [Ecmall]ECMALL目录结构设置与数据库表
最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛连二次开发板块都没有,都在哪瞎扯淡,广告一堆.可悲~ ...
- 极客范:如何使用 Cloud Insight 来监控闭路电视?
最近新上线支持 Windows 系统及其组件 监控功能的 Cloud Insight,在系统监控领域基本囊括了对所有主流和部分非主流平台的支持.但是这还不够,Cloud Insight 可不仅仅是一个 ...
- POJ2349+prim
最小生成树 /* prim 题意:给定一些点,一些卫星,一个卫星能连接两个点,点和点之间通信有一定的距离限制. 问能使得所有的点联通的最小距离. */ #include<stdio.h> ...
- IText PdfPTable表格 单元的居中显示
昨晚寻找了网上很多关于IText表格居中问题,他们其中的有些代码我即使复制上去生成的doc表格的文字都是不居中的,后来我自己找出了一种居中方式: 为PdfPCell对象添加paragraph对象,并将 ...