在开发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 ++编译器时是否可以禁用此类警告?
答案 0 :(得分:97)
我相信你可以用
编译-Wno-unknown-pragmas
压制这些。
答案 1 :(得分:24)
在GCC中,使用-Wno-unknown-pragmas
进行编译在MS Visual Studio 2005中(此问题未标记为gcc,因此我将其添加为参考),您可以在项目设置 - > C / C ++ - >高级中全局禁用。在“禁用特定警告”
中输入4068或者您可以将其添加到任何文件以在本地禁用警告
#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */
答案 2 :(得分:18)
也许看GCC Diagnostic Pragmas?或者,在这种情况下,您可以使用-Wall
启用的combination of options,不包括-Wunknown-pragmas
。
答案 3 :(得分:7)
谢谢大家的提示。就我而言,我和Qt Mingw一起工作。我需要在我的.PRO文件中另外设置标志:
QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas
答案 4 :(得分:5)
我知道这个问题是关于海湾合作委员会,但对于那些希望尽可能轻松地做到这一点的人来说:
大多数可以发出此警告的编译器都可以通过命令行(例外:PGI)或代码(例外:DMC)禁用警告:
-Wno-unknown-pragmas
/ #pragma GCC diagnostic ignored "-Wunknown-pragmas"
-Wno-unknown-pragmas
/ #pragma clang diagnostic ignored "-Wunknown-pragmas"
-diag-disable 161
/ #pragma warning(disable:161)
#pragma diag_suppress 1675
-wd4068
/ #pragma warning(disable:4068)
--diag_suppress,-pds=163
/ #pragma diag_suppress 163
--diag_suppress Pe161
/ #pragma diag_suppress=Pe161
-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也有这样的宏:HEDLEY_DIAGNOSTIC_PUSH
/ HEDLEY_DIAGNOSTIC_POP
。