错误:使用按位“|”带有布尔操作数

问题描述 投票:0回答:3

更新很少... 错误代码来自 notcurses.h 因此无法更改它 三个月以来我编译没有问题,但现在

#include <notcurses/notcurses.h>
我收到此错误!

/opt/homebrew/Cellar/notcurses/3.0.9_1/include/notcurses/notcurses.h:205:12: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
  return !(ncchannel_default_p(channel) | ncchannel_palindex_p(channel));
          ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        ||
/opt/homebrew/Cellar/notcurses/3.0.9_1/include/notcurses/notcurses.h:205:12: note: cast one or both operands to int to silence this warning
1 error generated.

我不认为这与 notcurses 本身有关...但上周,一切都很好。 我带着笔记本电脑旅行回来,当尝试编译时,我现在遇到了这个错误。

在 notcurses.h 中,错误的函数是:

201 // Is this channel using RGB color?
202 static inline bool
203 ncchannel_rgb_p(uint32_t channel){
# 204   ***// bitwise or is intentional (allows compiler more freedom)***
205   return !(ncchannel_default_p(channel) | ncchannel_palindex_p(channel));
206 }

我尝试更新brew、gcc 和notcurses 我在编译中使用 $(pkg-config --cflags --libs notcurses)

有没有办法解决这个问题

  • 修改notcurses.h
  • 在编译行删除 -Werror -Wall -Wextra

我应该重新安装 MacO 吗?

c bit-manipulation logical-or
3个回答
1
投票

最简单的修复方法(无需研究位掩码优化)是将布尔谓词函数返回值转换为编译器建议的

int

// Is this channel using RGB color?
static inline bool ncchannel_rgb_p(uint32_t channel) {
   // bitwise or is intentional (allows compiler more freedom)
   return !(+ncchannel_default_p(channel) | +ncchannel_palindex_p(channel));
}

0
投票

一个可以替代

205   return !(ncchannel_default_p(channel) | ncchannel_palindex_p(channel));

205   return !(!(channel & NC_BGDEFAULT_MASK) | (channel & (NC_BGDEFAULT_MASK | NC_BG_PALETTE)) 

解决警告并允许编译器防止使用

||
进行分支。


0
投票

不在这里咒骂作者。我希望你能把这个带到我们的 bugtracker 上;几个月前就已经解决了!我们现在正在处理它,作为 https://github.com/dankamongmen/notcurses/pull/2746

的一部分
© www.soinside.com 2019 - 2024. All rights reserved.