在Visual C++中,可以使用#pragma warning (disable: ...).我还发现在GCC中你可以覆盖每个文件的编译器标志.我怎样才能为"下一行"做这个,或者使用GCC围绕代码区域推送/弹出语义?
我试图忽略来自某些第三方头文件的警告,如下所示:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#pragma GCC diagnostic ignored "-Wreorder"
#include <some_3rd_party_header.h>
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
这种方法似乎总体上起作用,但不适用于未知的pragma警告(我仍然得到它们).
为什么它适用于其他警告但不适用于此警告?谁能证实这种行为?
我使用的是G ++(版本4.7.1)与-Wall和-std=c++0xDebian的下.
当我尝试编译以下联合时,我会弹出此警告:
10:5: note: offset of packed bit-field 'main()::pack_it_in::<anonymous struct>::two' has changed in GCC 4.4
#pragma GCC diagnostic ignore "-Wpacked-bitfield-compat"
union pack_it_in {
struct
{
uint8_t zero : 3;
uint8_t one : 2;
uint8_t two : 6;
uint8_t three : 4;
uint8_t four : 1;
} __attribute__((packed)) u8_2;
uint16_t u16;
};
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
#pragma不会忽略该注释.有没有办法让#pragma工作而不必使用,-Wno-packed-bitfield-compat因为我希望这个警告只被我八个工会中的两个忽略了?