Mar*_*nto 47 c++ compiler-construction warnings pragma
在开发C++应用程序时,我不得不使用第三方库,它产生了大量与正在使用的无害#pragma指令相关的警告.
../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
from ../File3.hpp:57,
from File4.h:49,
Run Code Online (Sandbox Code Playgroud)
使用GNU C++编译器时是否可以禁用此类警告?
Ada*_*ght 100
我相信你可以编译
-Wno-unknown-pragmas
Run Code Online (Sandbox Code Playgroud)
抑制这些.
Air*_*Ltd 24
在GCC中,使用-Wno-unknown-pragmas进行编译
在MS Visual Studio 2005中(此问题未标记为gcc,因此我将其添加为参考),您可以在项目设置 - > C/C++ - >高级中全局禁用.在"禁用特定警告"中输入4068
或者您可以将其添加到任何文件以在本地禁用警告
#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */
Run Code Online (Sandbox Code Playgroud)
谢谢大家的提示.就我而言,我和Qt Mingw一起工作.我需要在我的.PRO文件中以另一种方式设置标志:
QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas
Run Code Online (Sandbox Code Playgroud)
我知道问题是关于GCC的,但是对于希望尽可能轻便地这样做的人:
大多数可以发出此警告的编译器都有一种方法可以从命令行(例外: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
Run Code Online (Sandbox Code Playgroud)
请注意,Hedley可能比该答案具有更完整的信息,因为我可能会忘记更新此答案,因此,如果您不想只使用Hedley(它是一个公共域C / C ++标头,则可以轻松地放入您的项目中),您可能希望使用Hedley作为指导,而不是上面的信息。
版本检查可能过于悲观,但是有时很难获得有关过时的专有编译器版本的信息,我宁愿安全也不愿后悔。同样,赫德利的信息可能会更好。
许多编译器还可以将警告推送/弹出到堆栈上,因此您可以推送,然后在包含不受控制的代码之前将其禁用,然后弹出,以便您的代码仍会触发有问题的警告(因此您可以清除警告)。在Hedley中也有相应的宏:HEDLEY_DIAGNOSTIC_PUSH/ HEDLEY_DIAGNOSTIC_POP。
| 归档时间: |
|
| 查看次数: |
65421 次 |
| 最近记录: |