gpt4 book ai didi

c - "Grouping"C 中的枚举值

转载 作者:太空狗 更新时间:2023-10-29 16:33:33 26 4
gpt4 key购买 nike

如果我有一些像这样的枚举

typedef enum {
AN_TRISTATE_0,
AN_TRISTATE_1,
AN_NOTHING,
AN_MOTOR_1,
AN_MOTOR_2,
AN_MOTOR_3,
AN_SENSOR_1,
AN_SENSOR_2,
AN_SENSOR_3,
AN_SENSOR_4,
AN_SENSOR_5
} adc_pin_func_t;

adc_pin_func_t a_particular_pin = ...

,是否有可能检查引脚是否属于特定组,例如引脚是 AN_MOTOR 的一部分或 AN_SENSOR 的一部分,而不必检查针对每个可能组中的每个项目。

除了使用枚举之外,还有更有效的方法吗?

提前致谢

最佳答案

您可以为每个组创建掩码:

typedef enum {
AN_TRISTATE_0 = 0x00001,
AN_TRISTATE_1 = 0x00002,
AN_TRISTATE_MASK = 0x0000f,

AN_NOTHING = 0x00010, // Should this be 0x00000 ?

AN_MOTOR_1 = 0x00100,
AN_MOTOR_2 = 0x00200,
AN_MOTOR_3 = 0x00400,
AN_MOTOR_MASK = 0x00f00,

AN_SENSOR_1 = 0x01000,
AN_SENSOR_2 = 0x02000,
AN_SENSOR_3 = 0x04000,
AN_SENSOR_4 = 0x08000,
AN_SENSOR_5 = 0x10000,
AN_SENSOR_MASK = 0xff000
} adc_pin_func_t;

然后使用 & 运算符简单地针对掩码测试一组:

if (a_particular_pin & AN_SENSOR_MASK)
{
// it's a sensor pin
}
else if (a_particular_pin & AN_MOTOR_MASK)
{
// it's a motor pin
}

编辑:正如其他人建议的使用范围,那么您可能可以为测试创建一个宏,这将允许您更改测试的执行方式而无需更改代码(总是一件好事):

#define IS_AN_SENSOR(x) (((x) & AN_SENSOR_MASK) != 0)
#define IS_AN_MOTOR(x) (((x) & AN_MOTOR_MASK) != 0)
// etc.

然后测试变成:

if (IS_AN_SENSOR(a_particular_pin))
{
// it's a sensor pin
}
else if (IS_AN_MOTOR(a_particular_pin))
{
// it's a motor pin
}
// etc

如果您随后需要更改为使用范围,则只需更改宏(显然您需要定义范围的最小值/最大值):

#define IS_AN_SENSOR(x) ((x) >= AN_SENSOR_START && (x) <= AN_SENSOR_END)
// etc

关于c - "Grouping"C 中的枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17229949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com