msvc/gcc:中用#pragma指令关闭特定警告(warning)

在使用一些第三方库或源码的时候,经常会遇到编译时产生warnings情况,这些warning不是我们自己的代码产生的,当然也不好去修改,但每次编译都显示一大堆与自己代码无关的警告也着实看着不爽,更麻烦的是还有可能造成自己代码中产生的警告被淹没在多过的无关警告中,而被忽略掉的情况。 
所以要想办法关闭这些第三方代码和库产生的警告。 
关闭特定的warning可以在编译时通过命令行参数的方式指定,比如 gcc 是在命令行一般是用-Wno-xxxx这样的形式禁止特定的warning,这里xxxx代入特定的警告名。但这种方式相当将所有代码产生的这个warning显示都关闭了,不管是第三方库产生的还是自己的代码产生的,所以这种用法并不适合。 
关闭特定的warning还可以在代码中通过添加#pragma指令来实现,用#pragma指令可以对指定的区域的代码关闭指定的warning。

msvc下的用法是这样的

#ifdef _MSC_VER
// 关闭编译CImg.h时产生的警告
#pragma  warning( push )
#pragma  warning( disable: 4267 4319 )
#endif
#include "CImg.h"
#ifdef _MSC_VER
#pragma  warning(  pop  )
#endif

gcc下的用法是这样的:

#ifdef __GNUC__
// 关闭 using  _Base::_Base; 这行代码产生的警告
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Winherited-variadic-ctor"
#endif
.....
namespace cimg_library {
template<typename T>
class CImgWrapper:public CImg<T> {
public:
    using   _Base =CImg<T>;
    using  _Base::_Base; // 继承基类构造函数
    ......
}
} /* namespace cimg_library */
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif

参考资料: 
https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html 
https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas

时间: 2024-02-28 18:23:33

msvc/gcc:中用#pragma指令关闭特定警告(warning)的相关文章

gcc或clang中消除特定警告的方法

    一般在编译代码时会有相当多的警告信息,尤其当我们使用了-Wall选项的时候.-Wall绝不是像其字面意思一样打开所有警告.不过它打开的警告也相当多了.对于一些我们已知"无害"但仍然打印出来挤占可怜的控制台空间的警告,我们当然可以将其"屏蔽"掉.     就拿以下代码来说: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <uni

#pragma指令的用法

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征.依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的.  其格式一般为: #Pragma Para  其中Para 为参数,下面来看一些常用的参数.  (1)message 参数. Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗

pragma指令简介

在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作.下面介绍了一下该指令的一些常用参数,希望对大家有所帮助! 一. message 参数. message 它能够在编译信息输出窗  口中输出相应的信息,这对于源代码信息的控制是非常重要的.其使用方法为:  #pragma message("消息文本")  当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来.  当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会

关闭vs警告

禁用所有编译器警告 当"解决方案资源管理器"中有项目选中时,在"项目"菜单上单击"属性". 单击"编译"选项卡. 选中"禁用所有警告"复选框. 禁用单个编译器警告 在"解决方案资源管理器"中选定一个项目,然后在"项目"菜单中单击"属性". 单击"编译"选项卡. 在"默认编译器选项"表中,将该警告的"

Python编程中用close()方法关闭文件的教程

  这篇文章主要介绍了Python编程中用close()方法关闭文件的教程,是Python编程入门中的基础知识,需要的朋友可以参考下 close()方法方法关闭打开的文件.关闭的文件无法读取或写入更多东西.文件已被关闭之后任何操作会引发ValueError.但是调用close()多次是可以的. Python自动关闭,当一个文件的引用对象被重新分配给另外一个文件.它使用close()方法来关闭一个文件一个很好的做法. 语法 以下是close()方法的语法: ? 1 fileObject.close

jsp-为什么JSP页面引用不到tag文件中用variable指令返回的对象

问题描述 为什么JSP页面引用不到tag文件中用variable指令返回的对象 inputNumber.jsp页面代码 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib tagdir="/WEB-INF/tags" prefix="computer" %> 输入运算数.选择运

关闭 C4996 警告(_CRT_SECURE_NO_DEPRECATE)

在使用VC 2005 的开发者会遇到这样的问题,在使用std命名空间库函数的时候,往往会出现类似于下面的警告: warning C4996: strcpy was declared deprecated   出现这样的警告,是因为VC2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露.缓冲区溢出.非法访问等安全问题.这些函数如:strcpy.strcat等.   对于这些问题,VC2005建议使用这些函数的更高级的安全版本,即在这些函数名后面加了一个_s的函数.这些安全版本函数

赶驴网宣布关闭:警告竞争对手“别总拿钱砸人”

4月11日上午消息,风风雨雨的赶驴风波今日落下帷幕, 百姓网宣布旗下赶驴网今日正式关闭,域名ganlvwang.com将自动跳转到百姓网. 赶集网稍早前进行了大规模广告投放,在这个广告中,姚晨骑着一头驴子的形象,给 网友留下深刻印象.百姓网抢先注册了拼音域名的赶驴网(ganlvwang.com),并放出口号"赶驴网,啥没有?".而赶集网的口号则是"赶集网,啥都有". 赶驴风波迅速演变成了一场关于行业无序竞争的太讨论,赶集网CEO杨浩涌在其微博上表示,同行没必要如此竞

16种C语言编译警告(Warning)类型的解决方法_C 语言

当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息.警告信息可能意味着程序中隐含的大错误,也可能确实没有问题.对于警告的正确处理方式应该是:尽可能地消除之.对于编译程序给出的每个警告都应该仔细分析,看看是否真的有问题.只有那些确实无问题的警告才能放下不管. 说明: 由于编译的警告各种各样,根本不可以一一罗列出来,下面只是列举出比较典型的一些警告,还有一些警告,大家只要根据字面意思,就可以很快的查找出来,并解决之. 类型1:显示:warning: implicit declara