为什么可以通过额外的比较来检查枚举位掩码?

时间:2012-09-24 11:17:36

标签: c syntax

我最近遇到过这几次:

if ((flags & PERFORM_DELETION_CONCURRENTLY) == PERFORM_DELETION_CONCURRENTLY)
   ...

额外比较的原因是什么?为什么不呢?

if (flags & PERFORM_DELETION_CONCURRENTLY)
   ...

我的猜测是,当编译器更加严格的时候,从以往的日子开始沉默警告是一种遗留的习惯。

2 个答案:

答案 0 :(得分:6)

还有可能在掩码中设置了多个位。在这种情况下,两个比较具有不同的语义。

答案 1 :(得分:2)

准确地说,如果PERFORM_DELETION_CONCURRENTLY中的所有位都设置在flags中,则条件为真。一些稍微更高效的方法(在某些架构上)是if ((~flags & PERFORM_DELETION_CONCURRENTLY) == 0) ...我将ALL_BITS_SET宏埋在我的标准头文件中,这使得代码更易读/可理解。