C 检查值是否在未定义的枚举中?

C 检查值是否在未定义的枚举中?,c,enums,C,Enums,我正在处理一个在不同处理器上运行的文件,因此头文件会根据硬件的不同而变化。我的程序需要接收索引,如果它是特定枚举的有效索引,请使用它,否则转到默认值 我需要检查它是否是此枚举的有效索引。但是,枚举在处理器之间略有不同。每个芯片都有一个头文件,所以我不知道定义了多少个索引。下面是它的大致外观: typedef enum { POWER_LEVEL_0 POWER_LEVEL_1, POWER_LEVEL_2, POWER_LEVEL_3, POWER

我正在处理一个在不同处理器上运行的文件,因此头文件会根据硬件的不同而变化。我的程序需要接收索引,如果它是特定枚举的有效索引,请使用它,否则转到默认值

我需要检查它是否是此枚举的有效索引。但是,枚举在处理器之间略有不同。每个芯片都有一个头文件,所以我不知道定义了多少个索引。下面是它的大致外观:

typedef enum
    {
    POWER_LEVEL_0
    POWER_LEVEL_1,
    POWER_LEVEL_2,
    POWER_LEVEL_3,
    POWER_LEVEL_4
    } power_type;
我需要能够测试是否定义了接收到的索引,如下所示:

int input;
...
if( exists_in_power_type(input) )
    //accept the value
else
    //use default value
我知道索引的数量将在4到7之间,如果我在一个可能有8个或更多电源选项的新处理器上运行这个项目,索引的数量可能会增加。在这种情况下,我希望我的程序是可移植的,并且只需要在该处理器的新头中定义一个同名的枚举


这个问题可能会简单一些,因为枚举值只从0开始,然后递增1。有没有一种方法可以在不知道枚举定义的情况下获取枚举的长度/最大值?我可以在这里使用类似的工作吗?

没有跨平台的方法来确定特定
枚举的最大合法枚举值。但是,您可以通过引入一个紧跟在所有其他值之后的伪枚举值来解决此问题:

typedef enum
{
    POWER_LEVEL_0
    POWER_LEVEL_1,
    POWER_LEVEL_2,
    POWER_LEVEL_3,
    POWER_LEVEL_4,
    ILLEGAL_POWER_LEVEL // Not to be used directly; must be last
} power_type;
现在,您可以按如下方式编写助手函数:

bool exists_in_power_type(power_type value) {
    return 0 <= value && value < ILLEGAL_POWER_LEVEL;
}
bool存在于功率类型中(功率类型值){

返回0没有跨平台的方法来确定特定
enum
的最大合法枚举值。但是,您可以通过引入紧跟在其他值之后的伪枚举值来解决此问题:

typedef enum
{
    POWER_LEVEL_0
    POWER_LEVEL_1,
    POWER_LEVEL_2,
    POWER_LEVEL_3,
    POWER_LEVEL_4,
    ILLEGAL_POWER_LEVEL // Not to be used directly; must be last
} power_type;
现在,您可以按如下方式编写助手函数:

bool exists_in_power_type(power_type value) {
    return 0 <= value && value < ILLEGAL_POWER_LEVEL;
}
bool存在于功率类型中(功率类型值){

返回0我通常将伪值称为
NUM\u POWER\u LEVELS
,因为它不清楚应该在哪里添加新的功率级别。我通常将伪值称为
NUM\u POWER\u LEVELS
,因为它不清楚应该在哪里添加新的功率级别。