如何禁止#pragma警告?
-
02-07-2019 - |
题
虽然发展中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
.