在开发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++编译器时是否可以禁用此类警告?
我相信你可以编译
-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
我知道问题是关于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
。