【发布时间】:2015-03-27 14:18:37
【问题描述】:
所以我第一次尝试在 C 中使用枚举类型。所以我有一个枚举“变量”?声明,我也有一个结构,它有一个枚举类型的变量(除其他外)。最后我有一个静态数组,其中有一个包含每个枚举“类型?”的元素。以它们被宣布的相同顺序。我希望使用枚举类型作为数组的索引。
所以我的问题是我需要以某种方式将 char* 变量与枚举类型相关联。如果我知道 Char* 变量是枚举类型之一,是否有某种方法可以断言而不必查看每个 char 来确定它是哪个特定的枚举“选项”?
例子:
enum example = {abc,def}
struct _strExample {
enum example letters;
....
};
typedef struct _strExample strEx;
static strEx Table[2] = {
{abc,...}
{def,...}
};
//Given char* "abc" , want either example.abc or 0 ( correct index of table)
所以给定 char*“abc”(不需要是 char*),有没有一种简单的方法来获取正确的枚举“类型?”(abc 或 def)或表的正确索引?我知道我可以检查 char* 中的所有单个字符并手动确定哪个枚举“类型?”是的,但我将使用大量枚举变量,而这种事情正是我试图避免的。你们可以就枚举类型和/或我的设计提供任何帮助或建议将不胜感激。
【问题讨论】:
-
您是否考虑过使用gperf?
-
不,
enum值必须计算为编译时已知的整数值,因此字符串(即使指针将转换为整数)不可用。不过,您可以使用单个字符,因为char是一个整数类型。 -
我在 java 中使用过一些哈希表,这似乎是一个很好的解决方案,但我可能只使用 C 标准库中的东西。
-
最后一段的解决方法是怎么回事?如果您害怕性能损失,请将查找函数内联,声明表
const,编译器应该能够优化字符串文字的查找(Gcc 可以,我刚刚尝试过)。 -
您可以遍历
strEx数组,其中包含枚举和可能的char *(但我不知道,显示的代码不完整)。要从枚举到字符串,您可以再次遍历strEx直到找到它。不,您不能直接迭代枚举(有一些解决方法)。