C 定义一个常数,该常数包含所有或所有的值
我的应用程序使用或ed值,如以下示例(伪): 这些常量以整数的形式在各种函数中获取或编辑,如下所示:C 定义一个常数,该常数包含所有或所有的值,c,C,我的应用程序使用或ed值,如以下示例(伪): 这些常量以整数的形式在各种函数中获取或编辑,如下所示: OPTION_1 | OPTION_4 ... #define OPTION_ALL ?? <-- include all options 有时我有很多选择来传递我不喜欢的函数。我更喜欢这样的选项常量: OPTION_1 | OPTION_4 ... #define OPTION_ALL ?? <-- include all options 或者这
OPTION_1 | OPTION_4 ...
#define OPTION_ALL ?? <-- include all options
有时我有很多选择来传递我不喜欢的函数。我更喜欢这样的选项常量:
OPTION_1 | OPTION_4 ...
#define OPTION_ALL ?? <-- include all options
或者这是唯一的解决办法
#define OPTION_ALL OPTION_1 | OPTION_2 | OPTION_3 | OPTION_4
解决方案:
看来这是最好的办法:
#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。它应该是1,然后选项\u ALL
将是15
#define OPTION_1 1
#define OPTION_2 2
#define OPTION_3 4
#define OPTION_4 8
#define OPTION_ALL 15
基本上,您所做的是将二进制中的一位设置为每个选项的1。i、 e
#define OPTION_1 0b00000001
#define OPTION_2 0b00000010
#define OPTION_3 0b00000100
#define OPTION_4 0b00001000
#define OPTION_ALL 0b00001111
然后,您可以根据需要进行扩展。
选项\u ALL
应该是7,而不是8。这也是为什么您应该明确地编写OR,它可以保护您免受自己的数学错误。#define OPTION_ALL 0xffffffff
不仅包括当前选项,还包括将来定义的选项,因为它设置了所有位。顺便说一句,你为什么把选项1定义为零呢?@StoryTeller,是的,我测试了它们,根据我或大约有多少个值,它们的值是1,3,5,7。但是,每当我更新选项时,这需要硬编码值:(好的,你可以按照myaut的建议去做,只是确保你还定义了一个无符号类型来保存所有这些选项。@myaut,没有任何理由。我认为只要我将值加倍就可以了。应该注意的是,二进制常量是一个扩展,而不是带有0x数字的标准Creplace 0b,以使其可移植。为了更好地理解,我使用了二进制,一旦有了它,就可以使用十进制或十六进制数。我看到了thanx。所以我只需要从下一个值中减去1,假设我从1
开始。OPTION\u 5 16
和OPTION\u 31
都有效吗?