我正在为嵌入式应用程序编写一些 C 代码,我遇到了一个问题,其中没有正确执行与枚举值的比较。以下面的代码片段为例:
typedef unsigned int UINT16;
typedef enum enum_items_tag
{
ITEM_1,
ITEM_2,
ITEM_3,
/* ... */
ITEM_918,
MAX_ENUM_ITEMS
} enum_items_t;
UINT16 n;
for ( n = 0; n < MAX_ENUM_ITEMS; n++ )
{
// Do something
}
代码按预期执行,直到 n 增加到等于 MAX_ENUM_ITEMS,此时比较失败,并在循环内继续执行(当它应该退出时)。我过去做过这样的事情,没有任何问题。
我已经尝试将 n 重新键入为 enum_items_t(即将 n 声明为“enum_items_t n”),并将 MAX_ENUM_ITEMS 类型转换为 UINT16。在这一点上我唯一能想到的另一件事是,我的枚举类型 (919) 中的项目数量可能存在问题。有谁知道枚举类型是否有这样的限制?我正在使用基于 GCC 的编译器。或者,如果您有任何其他想法,我们将不胜感激。谢谢。
最佳答案
会不会是差一个错误?我希望 gcc 从 0 开始枚举......但是你说你在调试时看到值增加到 919。所以这让我觉得要么你在枚举中偶然得到了一个额外的值,要么枚举值是从 1 开始的,就像命名方案所暗示的那样。
如果 ITEM_1 == 1 则将 n 从 1 开始...或按如下方式更改 MAX_ENUM_ITEMS 的值:
typedef enum enum_items_tag
{
ITEM_1,
ITEM_2,
ITEM_3,
/* ... */
ITEM_918,
MAX_ENUM_ITEMS = ITEM_918
} enum_items_t;
关于c - 枚举类型值未正确比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499963/