当前位置:  开发笔记 > 编程语言 > 正文

如何禁用#pragma警告?

如何解决《如何禁用#pragma警告?》经验,为你挑选了5个好方法。

在开发C++应用程序时,我不得不使用第三方库,它产生了大量与正在使用的无害#pragma指令相关的警告.

../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
                 from ../File3.hpp:57,
                 from File4.h:49,

使用GNU C++编译器时是否可以禁用此类警告?



1> Adam Wright..:

我相信你可以编译

-Wno-unknown-pragmas

抑制这些.


谢谢!这应该被接受!它是唯一一个(这里)使用GCC C++编译器的人.

2> Airsource Lt..:

在GCC中,使用-Wno-unknown-pragmas进行编译

在MS Visual Studio 2005中(此问题未标记为gcc,因此我将其添加为参考),您可以在项目设置 - > C/C++ - >高级中全局禁用.在"禁用特定警告"中输入4068

或者您可以将其添加到任何文件以在本地禁用警告

#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */



3> Mike Dimmick..:

也许看GCC Diagnostic Pragmas?另外在这种情况下,你可以使用选项组合是-Wall使不计-Wunknown-pragmas.



4> pamplemousse..:

谢谢大家的提示.就我而言,我和Qt Mingw一起工作.我需要在我的.PRO文件中以另一种方式设置标志:

QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas


如果您正在编译C代码而不是C++,请使用QMAKE_CFLAGS_WARN_ON + = -Wno-unknown-pragmas

5> nemequ..:

我知道问题是关于GCC的,但是对于希望尽可能轻便地这样做的人:

大多数可以发出此警告的编译器都有一种方法可以从命令行(例外:PGI)或代码(例外:DMC)中禁用警告:

GCC:-Wno-unknown-pragmas/#pragma GCC diagnostic ignored "-Wunknown-pragmas"

lang:-Wno-unknown-pragmas/#pragma clang diagnostic ignored "-Wunknown-pragmas"

英特尔C / C ++编译器:-diag-disable 161/#pragma warning(disable:161)

PGI: #pragma diag_suppress 1675

MSVC:-wd4068/#pragma warning(disable:4068)

TI:--diag_suppress,-pds=163/#pragma diag_suppress 163

IAR C / C ++编译器:--diag_suppress Pe161/#pragma diag_suppress=Pe161

Digital Mars C / C ++编译器: -w17

您可以将其中的大多数组合到一个宏中以在您的代码中使用,这就是我HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS在Hedley中对宏所做的操作:

#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif HEDLEY_TI_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif

请注意,Hedley可能比该答案具有更完整的信息,因为我可能会忘记更新此答案,因此,如果您不想只使用Hedley(它是一个公共域C / C ++标头,则可以轻松地放入您的项目中),您可能希望使用Hedley作为指导,而不是上面的信息。

版本检查可能过于悲观,但是有时很难获得有关过时的专有编译器版本的信息,我宁愿安全也不愿后悔。同样,赫德利的信息可能会更好。

许多编译器还可以将警告推送/弹出到堆栈上,因此您可以推送,然后在包含不受控制的代码之前将其禁用,然后弹出,以便您的代码仍会触发有问题的警告(因此您可以清除警告)。在Hedley中也有相应的宏:HEDLEY_DIAGNOSTIC_PUSH/ HEDLEY_DIAGNOSTIC_POP

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有