虽然发展中C++应用程序,我不得不使用一个第3方图书馆产生了大量的警告相关的有害的#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++编译器吗?

有帮助吗?

解决方案

我相信你可以用

编译
-Wno-unknown-pragmas

压制这些。

其他提示

在GCC中,使用-Wno-unknown-pragmas

进行编译

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

中输入4068

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

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

或许可以参见 GCC Diagnostic Pragmas ?或者,在这种情况下,您可以使用选项组合 -Wall 启用,不包括 -Wunknown-pragmas

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

QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas

我知道问题是关于海湾合作委员会,但人们想要这样做以便尽可能:

大多数编译可发出这个警告有一种方式来禁止的警告从命令行(例外:PGI)或在代码(例外:DMC):

  • 海湾合作委员会: -Wno-unknown-pragmas / #pragma GCC diagnostic ignored "-Wunknown-pragmas"
  • 铛: -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
  • 数字火星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可能有更完整的信息于此的答案,因为我可能会忘记更新这个答案,所以,如果你不想只是使用海德利(这是一个单一的公共领域C/C++头你可以很容易落入你的项目)可能需要使用海德利为导向而不是信息上。

该版本的检查可能过于悲观,但有时很难获得良好的信息过时的版本的专有的编译器,我宁愿是安全总比对不起。再次,Hedley的信息可能会更好。

许多编制者也可以推动/出警告,到叠,因此可以推动,则禁止他们之前,包括代码你无法控制,那么流行这样 你的 代码仍然会触发警告的问题(因此可以清理它)。有宏在Hedley: HEDLEY_DIAGNOSTIC_PUSH / HEDLEY_DIAGNOSTIC_POP.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top