C++排雷:16. #pragma warning的几种用法

    技术2022-07-10  129

    #pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是对整个工程的所有文件有效。当该文件编译结束,设置也就失去作用。#pragma warning(push)是保存当前的编译器警告状态;#pragma warning(push, n) 存储当前报警设置,并设置报警级别为n。n为从1到4的自然数。#pragma warning(pop) 恢复之前压入堆栈的报警设置。该句之后的代码,就恢复了warning,即在一对push和pop之间作的任何报警相关设置都将失效。#pragma warning(disable: n) 将某个警报置为失效。#pragma warning(default: n) 将报警置为默认。#pragma warning (enable: n)将被禁用的warning n启用#pragma warning (error: n)将一个warning作为一个错误once:只显示一次(警告/错误等)消息

    如果大家对上面的解释不是很理解,可以参考一下下面的例子及说明

    #pragma warning( disable : 4507 34; once : 4385; error : 164 ) 等价于: #pragma warning(disable:4507 34) // 不显示4507和34号警告信息 #pragma warning(once:4385) // 4385号警告信息仅报告一次 #pragma warning(error:164) // 把164号警告信息作为一个错误。

    #pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的 一切改动取消。例如: #pragma warning( push ) #pragma warning( disable : 4705 ) #pragma warning( disable : 4706 ) #pragma warning( disable : 4707 ) #pragma warning( pop ) 在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)

    在使用标准C++进行编程的时候经常会得到很多的警告信息,而这些警告信息都是不必要的提示,

    可用#pragma warning(disable:4786)来禁止该类型的警告

    在vc中使用ADO的时候也会得到不必要的警告信息

    可用#pragma warning(disable:4146)来消除该类型的警告信息
    Processed: 0.011, SQL: 9