我最近遇到过这几次:
if ((flags & PERFORM_DELETION_CONCURRENTLY) == PERFORM_DELETION_CONCURRENTLY)
...
额外比较的原因是什么?为什么不呢?
if (flags & PERFORM_DELETION_CONCURRENTLY)
...
我的猜测是,当编译器更加严格的时候,从以往的日子开始沉默警告是一种遗留的习惯。
答案 0 :(得分:6)
还有可能在掩码中设置了多个位。在这种情况下,两个比较具有不同的语义。
答案 1 :(得分:2)
准确地说,如果PERFORM_DELETION_CONCURRENTLY
中的所有位都设置在flags
中,则条件为真。一些稍微更高效的方法(在某些架构上)是if ((~flags & PERFORM_DELETION_CONCURRENTLY) == 0)
...我将ALL_BITS_SET
宏埋在我的标准头文件中,这使得代码更易读/可理解。