#define宏中的pragma来禁用警告

时间:2015-02-26 08:01:52

标签: c++ c macros

我正在尝试做这样的事情:

#ifdef _MSC_VER
    #define DISABLE_WARNINGS() \
        #pragma warning( push, 0 )
#elif __GNUC__
#define DISABLE_WARNINGS() \
        #define DISABLE_WARNINGS \
        #pragma GCC diagnostic push \
        #pragma GCC diagnostic ignored "-Wall"
#endif

我想在我的代码中定义一个单独的宏,例如“DISABLE_WARNINGS”,然后包含在 W4 上产生大量警告的第三方标题,并确保代码在任何平台上编译。

例如:

DISABLE_WARNINGS
#include <gtkmm/buttonbox.h>
#include <gtkmm/box.h>
#include <gtkmm/window.h>
#include <gtkmm/button.h>
ENABLE_WARNINGS

使用单宏实现这一目标的最佳方法是什么?

修改 我认为没有理由将此问题标记为“重复”? 标记为“重复”的答案仅部分地回答了这个问题:

#ifdef _MSC_VER
#define DISABLE_WARNINGS __pragma(warning( push, 0 ))
#endif

#ifdef _MSC_VER
#define ENABLE_WARNINGS __pragma(warning( pop ))
#endif

但是你会如何为GNU编译器做同样的事情?有什么“重复”所以我可以看一下吗?

EDIT2:

这是一个名为 pragmas.h 的最终标题,您可以使用它来编译警告级别为4的代码:

#ifndef PRAGMAS_H
#define PRAGMAS_H

/* define DW before including 3rd party and std headers to compile with W4 */
/* define EW after including 3rd party and std headers to compile with W4 */

#if defined _MSC_VER
/* DISABLE WARNINGS */
#define DW __pragma(warning( push, 0 ))
/* ENABLE WARNINGS */
    #define EW __pragma(warning( pop ))
#elif defined __GNUC__ 
/* DISABLE WARNINGS */
    #define DW \
        _Pragma("GCC diagnostic push") \
        _Pragma("GCC diagnostic ignored \"-Wall\"")
/* ENABLE WARNINGS */
    #define EW _Pragma("GCC diagnostic push")
#else  /* TODO: add more compilers here */
    #define DW
    #define EW
#endif

#endif /* PRAGMAS_H */

1 个答案:

答案 0 :(得分:1)

在C99模式下,您可以使用_Pragma代替#pragma

#define DISABLE_WARNINGS \
    _Pragma("GCC diagnostic push") \
    _Pragma("GCC diagnostic ignored \"-Wall\"")