1

私は最近これに数回遭遇しました:

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

追加の比較の理由は何ですか?なぜこれではないのですか?

if (flags & PERFORM_DELETION_CONCURRENTLY)
   ...

私の推測では、コンパイラーがより厳格だった昔の時代からの警告を黙らせるのは残りの習慣だと思います。

4

2 に答える 2

6

マスクに複数のビットが設定されている可能性もあります。その場合、2 つの比較のセマンティクスは異なります。

于 2012-09-24T11:18:53.783 に答える
2

PERFORM_DELETION_CONCURRENTLY正確には、 のすべてのビットが に設定されている場合、条件は true ですflags。これを行うための (一部のアーキテクチャでの) 少し効率的な方法はif ((~flags & PERFORM_DELETION_CONCURRENTLY) == 0)... これをALL_BITS_SET標準のヘッダー ファイルにマクロに埋め込みます。これにより、コードが読みやすく/理解しやすくなります。

于 2012-09-24T11:26:52.577 に答える