执行检查并设置/清除标志是很常见的,例如:
if (some_test) {
flag |= SOME_FLAG;
}
else {
flag &= ~SOME_FLAG;
}
到目前为止我发现的一个方便的方法是......
flag = (some_test) ? (flag | SOME_FLAG) : (flag & ~SOME_FLAG);
这可以做成一个宏并且没问题,但是是否有一些小技巧可以避免两次引用标志?
flag
(以防导致开销的多个实例化) 。
我正在寻找的示例(如果 C 可以对运算符进行三元运算)是......
flag ((some_test) ? (|=) : (&= ~) SOME_FLAG;
上面的例子只是为了描述我正在寻找的东西,当然它不会以目前的形式工作。