您可能熟悉enum
位掩码方案,例如:
enum Flags {
FLAG1 = 0x1,
FLAG2 = 0x2,
FLAG3 = 0x4,
FLAG4 = 0x8,
NO_FLAGS = 0,
ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};
f(FLAG2 | FLAG4);
我看过很多代码,然后测试掩码中的某个位,例如
if ((mask & FLAG3) == FLAG3)
但这不等于吗?
if (mask & FLAG3)
有什么理由使用第一个版本吗?在我看来,第二个较短的版本更清晰。
也许 C 程序员遗留下来的习惯认为应该将真值转换为1
? (即使在那里,较长的版本在赋值或return
语句中比在条件语句测试中更有意义。)