我正在尝试做这样的事情:
#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 */
答案 0 :(得分:1)
在C99模式下,您可以使用_Pragma
代替#pragma
:
#define DISABLE_WARNINGS \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic ignored \"-Wall\"")