定义一个包含所有OR-ed值的常量

时间:2017-03-12 09:05:15

标签: c

我的应用程序使用 OR-ed 值,如此示例(伪):

#define OPTION_1      1
#define OPTION_2      2
#define OPTION_3      4
#define OPTION_4      8

这些常量以整数的形式在各​​种函数中得到 OR-ed ,如:

OPTION_1 | OPTION_4 ...

有时我有很多 OPTIONS 来传递一个我不愿意的功能。我更喜欢这样的选项:

#define OPTION_ALL      ??   <-- include all options

保留任何内容,而不是将其作为默认值传递。

这可能吗?我试过了:

#define OPTION_ALL      8

或者这是唯一的解决方案吗?

#define OPTION_ALL      OPTION_1 | OPTION_2 | OPTION_3 | OPTION_4

SOLUTION:

这似乎是最好的方法:

#define OPTION_1      0
#define OPTION_2      1
#define OPTION_3      2
#define OPTION_4      4
#define OPTION_ALL    (OPTION_4 * 2) - 1

它只使用最后一个选项作为输入

1 个答案:

答案 0 :(得分:2)

是的,但OPTION_1不能为0.应为1,然后OPTION_ALL为15

#define OPTION_1      1
#define OPTION_2      2
#define OPTION_3      4
#define OPTION_4      8
#define OPTION_ALL    15

基本上你正在做的是你为每个选项设置一个二进制位为1。即

#define OPTION_1      0b00000001
#define OPTION_2      0b00000010
#define OPTION_3      0b00000100
#define OPTION_4      0b00001000
#define OPTION_ALL    0b00001111

然后你可以根据需要进行扩展。