チェックを実行してフラグを設定/クリアするのが一般的です。たとえば、次のようになります。
if (some_test) {
flag |= SOME_FLAG;
}
else {
flag &= ~SOME_FLAG;
}
これまでに見つけた便利な方法は...
flag = (some_test) ? (flag | SOME_FLAG) : (flag & ~SOME_FLAG);
これをマクロにすれば問題ありませんが、フラグを 2 回参照するのを避けるためのビット操作の魔法はありますか?
(複数のインスタンス化flag
がオーバーヘッドを引き起こす場合) .
私が探しているものの例(Cが演算子で三項演算を実行できる場合)は...
flag ((some_test) ? (|=) : (&= ~) SOME_FLAG;
上記の例は、私が探しているものを説明するためだけのものです。もちろん、現在の形式では機能しません。