执行检查并设置/清除标志是很常见的,例如:
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;
上面的例子只是为了描述我正在寻找的东西,当然它不会以当前的形式工作。
flag |= SOME_FLAG
是一个表达式,所以你可以使用宏
#define SET_FLAG(flag, some_test) \
((some_test) ? ((flag) |= SOME_FLAG) : ((flag) &= ~SOME_FLAG))
它评估flag
只能使用一次,使用时需要输入flag
只有一次。
SET_FLAG(a->b->c->d, test);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)