您可能熟悉enum
位掩码方案,例如:
enum Flags {
FLAG1 = 0x1,
FLAG2 = 0x2,
FLAG3 = 0x4,
FLAG4 = 0x8,
NO_FLAGS = 0,
ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};
f(FLAG2 | FLAG4);
Run Code Online (Sandbox Code Playgroud)
我已经看过很多代码,然后在掩码中测试一下
if ((mask & FLAG3) == FLAG3)
Run Code Online (Sandbox Code Playgroud)
但这不等于这个吗?
if (mask & FLAG3)
Run Code Online (Sandbox Code Playgroud)
有没有理由使用第一个版本?在我看来,第二个较短的版本更清晰.
也许C程序员的剩余习惯应该转换为真正的价值观1
?(即使在那里,较长的版本在赋值或return
语句中比在条件语句测试中更有意义.)
Dav*_*har 80
该构造if ((mask & FLAG3) == FLAG3)
测试FLAG3中的所有位是否存在于掩码中; if (mask & FLAG3)
如果测试任何存在.
如果你知道FLAG3只有1位设置,它们是等价的,但是如果你可能定义复合条件,那么就可以更清楚地养成明确测试所有位的习惯,如果这就是你的意思.