gpt4 book ai didi

c++ - 如何在 g++ 中抑制 ' left shift count >= width of type' 警告

转载 作者:行者123 更新时间:2023-11-30 03:44:30 32 4
gpt4 key购买 nike

(我的问题大部分与this one相同,但我的需求不同,因此我需要不同的解决方案。)

我正在尝试使用测试驱动开发,并且正在编写一组测试来验证我的 BIT(n) 宏的行为:

#define BIT(n) ( ((uint64_t)1) << (n) )

由于我对上述内容的测试包括预期通过和预期失败的组件,所以我故意做坏事,例如

MY_TEST_ASSERT(0 == (value64 = BIT(65)));

如果 BIT(n) 我的实现有问题,它会输出一些有用的东西,比如

TEST FAILED: '0 == (value64 = BIT(65))' (file 'tests/002.bit-hackery.cpp', line 12))

一切都按预期工作,但我在编译期间收到了一个烦人的警告:

../../inc/bit-hackery.hpp:15:32: warning: left shift count >= width of type [enabled by default]

(这实际上很烦人有两个原因:(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

最佳答案

不幸的是,g++ v4.8.x 没有禁用该特定警告的标志。

您可以指示 GCC/G++ 通过 -fdiagnostics-show-option 指示哪个命令行选项直接控制发出的每个诊断(如果诊断系统知道这样的选项) 标志。

在特定情况下,没有指示 -W 选项。

对于较新版本的 G++/CLANG++,您有 -Wshift-count-overflow 标志。

我认为没有办法在几行代码(例如 How to disable all warnings in g++ on a few lines of code )上禁用所有 g++ 警告。

-w 标志将禁用整个文件的所有警告,但它过多了。


PS BIT 的内联函数版本不会触发警告:

std::uint64_t BIT(std::uint64_t n) { return UINT64_C(1) << n; }

关于c++ - 如何在 g++ 中抑制 ' left shift count >= width of type' 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402801/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com