(我的问题与这个问题基本相同,但我的需求不同,因此我需要不同的解决方案。)
我正在尝试使用测试驱动的开发,并正在编写一组测试来验证我的BIT(n)
宏的行为:
#define BIT(n) ( ((uint64_t)1) << (n) )
由于我对上述内容的测试包括预期通过和预期失败组件,因此我故意做坏事,例如
MY_TEST_ASSERT(0 == (value64 = BIT(65)));
如果我的实现有问题 if BIT(n)
,它会输出一些有用的东西,比如
测试失败:'0 == (value64 = BIT(65))'(文件'tests/002.bit-hackery.cpp',第 12 行))
一切都按预期工作,但在编译过程中我收到了一个烦人的警告:
../../inc/bit-hackery.hpp:15:32:警告:左移计数 >= 类型宽度 [默认启用]
(这实际上很烦人,原因有两个:(1)我希望在这个测试代码中抑制它,因为我是故意测试这种情况,以及(2)在真实(非测试)代码中,我宁愿它被视为一个错误。但是,这个问题是关于前者的。)
我试过用一个#pragma
指令来抑制它,但我似乎找不到一个有效的:
#pragma GCC diagnostic push
//#pragma GCC diagnostic ignored "-Wcomparison-fixed"
//#pragma GCC diagnostic ignored "-Wtype-limits"
//#pragma GCC diagnostic ignored "-Wextra"
//#pragma GCC diagnostic ignored "-Wall"
MY_TEST_ASSERT(0 != (value64 = BIT(65)));
#pragma GCC diagnostic pop
有谁知道如何抑制这个特定的警告?
我的编译器版本是g++ (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4