【问题标题】:pragma in `#define` macro to disable warnings`#define` 宏中的编译指示禁用警告
【发布时间】:2015-02-26 08:01:52
【问题描述】:

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

#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

我想在包含在 W4 上产生大量警告的第 3 方标头之前在我的代码中定义一个宏,例如“DISABLE_WARNINGS”,并确保代码可以在任何平台上编译。

例如:

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

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

【问题讨论】:

  • @hvd,副本没有回答如何处理平台之间的条件编译(MS - GNU C),投票重新开放。
  • @codekiddy 另一个问题确实已经回答了这个问题:使用_Pragma。您已经拥有可用于 GCC 的 #pragma 指令。
  • @codekiddy 你可以连续使用两个_Pragmas。
  • @codekiddy 您没有为_Pragma 使用正确的语法。正如另一个问题的答案中所解释的那样,_Pragma 采用字符串文字(与 MSVC 的 __pragma 不同)。
  • 请考虑将您的 EDIT2 转换为答案。如果你愿意,我想投票!

标签: c++ c macros


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多