在C中将枚举映射到字符串的好方法

在C中将枚举映射到字符串的好方法,c,data-structures,hash,enums,C,Data Structures,Hash,Enums,我有一组枚举(如果您想知道的话,可以从libvirt库中找到),如下所示: enum whatever { VAL_A = 1 VAL_B = 2 ... } 如何将这些字符串转换为有意义的字符串?也就是说,VAL_A有一个表示“意思”的状态,VAL_B有一个表示“意思”的状态,依此类推。在php、perl或python中,我将生成一个key:val对,并在O(1)时间内返回结果。有没有一种有效的方法将这些映射到C中有意义的字符串?我在考虑一个switch语句,但想知道

我有一组枚举(如果您想知道的话,可以从libvirt库中找到),如下所示:

enum whatever {
    VAL_A = 1
    VAL_B = 2
    ...
}
如何将这些字符串转换为有意义的字符串?也就是说,VAL_A有一个表示“意思”的状态,VAL_B有一个表示“意思”的状态,依此类推。在php、perl或python中,我将生成一个key:val对,并在O(1)时间内返回结果。有没有一种有效的方法将这些映射到C中有意义的字符串?我在考虑一个switch语句,但想知道更好的方法

谢谢


Vik.

尝试将其用作数组索引:

char *strs[] = {"meaning_A", "meaning_B", "etc."};
strs[(int)enumvar - 1];

如果我的枚举值有五个值,它们之间的间隔为1到9000,该怎么办?在这种情况下,我不会分配不必要的空间吗?@VikhyathReddy:对不起,误读了你的评论。如果你真的有一个稀疏的数据集,你要么浪费空间,要么使用比O(1)慢的东西,比如二叉树。我相当怀疑perl、python等是否真的是O(1)。请参阅X宏等问题,如,和相关问题-我怀疑还有其他问题,但我还没有重新发现它们。C和python一样好--至少如果您能找到一个执行key:val转换的好库的话。然后,问题是如果你想做两次肮脏的黑客/宏,比如#include“foo.bar”,让它看起来你只需要像在
dirty_宏(1,2700701900)中一样输入一次值
将同时生成key:val对和枚举。