前几天,一位同事注意到他正在做的常见模式:
if (someBooleanFlag)
{
someBooleanFlag = FALSE;
...do some more stuff...
}
基本上,一个读时清除锁存器。并问我是否知道一种聪明的方法来测试标志并将其清除为单行,这样他就可以摆脱样板 someBooleanFlag = FALSE; 少量。关于这是否是好风格的问题,我发现我能为他做的最好的事情就是
#define TESTANDCLEAR(var) (var ? var-- : 0)
这假设只使用 1 和 0,并且它也不适用于位掩码。我想我会求助于堆栈巫师,看看是否有更好的方法和其他可以使用的技术。
(同样,无需讨论执行 TESTANDCLEAR() 表达式的风格是好是坏,如果我们真的能做到,那更多的是学术练习,以及如何普遍)