是否可以为枚举中的每个项目循环并提取其值,例如:
enum {
item 1 = 1,
item 2 = 7,
item 3 = 'B'
} items;
说,一个数组。可能的?
答案 0 :(得分:8)
你的意思是为枚举的每个值构造一个包含一个元素的数组吗?这样你最终得到一个数组{1, 7, 'B'}
?
不可能。枚举只不过是一堆编译时常量。在运行时,它们实际上只是整数。编译器甚至不检查以确保您在枚举变量中放置有效值(您可以将值5放在那里并且不介意)。因此,它不知道运行时可能的枚举值是什么。
当然,如果你的枚举是连续的(例如,你已经为值0,1,2和3定义了一个枚举),那么你可以使用for循环来做到这一点。
答案 1 :(得分:3)
这是不可能的。 enum
项只是常量,类比可以是#define
d常量:
#define item_1 1
#define item_2 7
#define item_3 'B'
(警告,#define
和enum
不相等。这只是一个类比。)
答案 2 :(得分:2)
这不可能以您期望的方式进行。假设您将序列号分配给枚举的成员,那么您可以使用循环迭代值。不幸的是,这是你能做的最好的事情。有关更深入的解释,请参阅this answer。
答案 3 :(得分:2)
您可以为枚举项提供明确的连续值,例如:
enum {
item1=0,
item2=1,
numberOfItems=2
} myEnum;
然后循环为
for (k=item1; k<=numberOfItems; k++)
但当然由您来确保myEnum
是连续的(即包含您尝试以这种方式循环的值)。
答案 4 :(得分:2)
如果您需要在实际应用程序中执行此操作,这是一种非常常见的情况,您可以通过以下方式执行此操作:
#define ITEM_N 3
typedef enum
{
item1 = 1,
item2 = 7,
item3 = 'B',
} Item_t;
const Item_t LOOKUP_TABLE [ITEM_N] =
{
item1,
item2,
item3
};
...
for(i=0; i<ITEM_N; i++)
{
printf("%d\n", LOOKUP_TABLE[i]);
}