参考链接: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:4035) //no return value
         #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(   push) 
        #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 指令将警告作为错误处理;还可以启用或禁用警告,如下面的示例所示:
        #pragma warning (error: 6260) 
        #pragma warning (disable: 6011) 
        #pragma warning (enable: 6056)

 
#pragma warning (disable : 4996)// disable deprecated warning 
  • 和#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)的更多相关文章

  1. #pragma CODE_SEG __NEAR_SEG NON_BANKED/#pragma CODE_SEG DEFAULT

    在写到SCI 中断发送,中断接收程序的时候,在程序中会出现#pragma CODE_SEG __NEAR_SEG NON_BANKED/#pragma CODE_SEG DEFAULT,这两句话在程序 ...

  2. #pragma warning 启用和禁用warning

    开发人员可以使用 #pragma 指令将警告作为错误处理:还可以启用或禁用警告,如下面的示例所示: 1.将一个warning作为一个错误 #pragma warning (error: 6260) 2 ...

  3. C++写#pragma warning(disable 4786)的作用

    C++编程时,在使用STL(C++标准模板库)的时候经常引发类似的错误,尤其是vector,map这类模板类,模板中套模板,一不小心就很长了. 当命名超过C++规定范围255字符时,就会产生这个名为d ...

  4. #pragma warning(disable 4786)

    #pragma warning(disable 4786) 此warning产生的原因是因为标识符过长,超过了最大限定255个字符类名超过了255个字符,使用时就会报4786的waring. 在使用S ...

  5. C# #pragma warning disable/restore

    #pragma warning 可以启用或禁用特定警告. 语法 #pragma warning disable warning-list #pragma warning restore warning ...

  6. Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma warning(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma warning(C# 参考) 1.返回顶部 1. #pragma warning(C# 参考) 2015/07/ ...

  7. #pragma warning(disable:4996)

    VS使用中常常会遇到一些过时或者不安全的函数,编译会报错: 错误 C4996 'sscanf': This function or variable may be unsafe. Consider u ...

  8. #pragma详解

    在#Pragma是预处理指令它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有 ...

  9. #pragma预处理命令详解

    #pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma指令: #pragma comment(lib,"XXX.lib") ...

随机推荐

  1. 对象工具类 - ObjectUtils.java

    对象工具类,提供对象克隆.获取对象属性.类型判断.Map转换对象.对象转Map.设置对象属性等. 源码如下:(点击下载 -  ObjectUtils.java .JsonUtils.java .gso ...

  2. c++ 读写锁

    #ifndef THREAD_UTIL_H #define THREAD_UTIL_H #include <pthread.h> namespace spider { class Auto ...

  3. MSMQ(消息队列)

    前段时间研究WCF接触到了MSMQ,所以认真的学习了一下,下面是我的笔记. 我理解的MSMQ MSMQ可以被看成一个数据储存装置,就如同数据库,只不过数据存储的是一条一条的记录,而MSMQ存储的是一个 ...

  4. Why are very few schools involved in deep learning research? Why are they still hooked on to Bayesian methods?

    Why are very few schools involved in deep learning research? Why are they still hooked on to Bayesia ...

  5. 软件调试之INT 3讲解

    第4章断点和单步执行 断点和单步执行是两个经常使用的调试功能,也是调试器的核心功能.本章我们将介绍IA-32 CPU是如何支持断点和单步执行功能的.前两节将分别介绍软件断点和硬件断点,第4.3节介绍用 ...

  6. firefly 环境配置所需工具

    原地址:http://www.9miao.com/question-15-59032.html http://down.9miao.com/attachment/forum/201405/19/120 ...

  7. A JSTL primer, Part 2: Getting down to the core

    In the initial article of this series, you got your first look at JSTL. We described the use of its  ...

  8. Visual C++ 6.0静态、动态链接库

    1.什么是静态连接库,什么是动态链接库          静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了 ...

  9. hbase 使用备忘

    hbase是基于hadoop的,所以hbase服务器必须启动hadoop,这点很重要. 当然hbase其实只用到了dadoop的一个组件 1. 启动hadoop-dfs 在主上执行如下命令,可以把主和 ...

  10. 使用QGridLayout布局实现翻页效果

    http://blog.csdn.net/u013704336/article/details/51474942