私は最近これに数回遭遇しました:
if ((flags & PERFORM_DELETION_CONCURRENTLY) == PERFORM_DELETION_CONCURRENTLY)
...
追加の比較の理由は何ですか?なぜこれではないのですか?
if (flags & PERFORM_DELETION_CONCURRENTLY)
...
私の推測では、コンパイラーがより厳格だった昔の時代からの警告を黙らせるのは残りの習慣だと思います。
マスクに複数のビットが設定されている可能性もあります。その場合、2 つの比較のセマンティクスは異なります。
PERFORM_DELETION_CONCURRENTLY
正確には、 のすべてのビットが に設定されている場合、条件は true ですflags
。これを行うための (一部のアーキテクチャでの) 少し効率的な方法はif ((~flags & PERFORM_DELETION_CONCURRENTLY) == 0)
... これをALL_BITS_SET
標準のヘッダー ファイルにマクロに埋め込みます。これにより、コードが読みやすく/理解しやすくなります。