如何在 C 中声明枚举中的字符串
typedef 枚举 testCaseId
{
“TC-HIW-0019”= 0,
“TC-HIW-0020”,
“TC-HIW-0021”
} 测试用例 ID;
我需要我的测试用例以枚举形式表示。在我的测试函数中,我需要在测试用例之间切换,例如:
void testfunc(uint8_t no)
{
switch(no)
{
case 0:
case 1:
default:
}
}
那么任何人都可以帮助了解如何使用枚举来声明字符串。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
事实上,这是不可能的。您可以使用类似以下内容来模拟它:
然后,您可以对所有代码使用枚举值 (
x
),并且当您需要字符串值用于描述目的时,例如记录,使用 testCaseDesc[x]。只需确保枚举和数组保持同步即可。
Actually, that can't be done. You can emulate it with something like the following:
Then you use the enumerated values (
x
) for all your code and, when you want the string value for descriptive purposes such as logging, usetestCaseDesc[x]
.Just make sure you keep your enumeration and array synchronised.
添加到 Pax 的解决方案中,如果您有一个非常大的这些内容列表,那么如果您使用 X 宏。它们有点笨拙,但是如果使用得当,它们确实可以为您节省大量的家务活。
这还可以实现一些更复杂的映射行为。例如,您可以轻松实现线性搜索来执行从字符串到枚举值的反向映射:
Adding to Pax's solution, if you have a very large list of these things, it may be simpler to keep things together and synchronized if you use X-Macros. They're a bit hackish, but when used judiciously, they can really save you a lot of housekeeping.
This can also enable some more complicated mapping behaviors. For example, you can easily implement a linear search to do a reverse mapping from string to enum value:
PaxDiablo 的解决方案是一个很好的解决方案,尽管帮助保持枚举和数组同步的一个好方法是在列表末尾添加一个枚举值,例如 TC_MAX。然后将数组大小设置为 TC_MAX 大小。这样,如果您添加或删除枚举但不更新数组,编译器会抱怨没有足够/太多的初始化程序。
PaxDiablo's solution is a good one, though a good way to help keep your enums and arrays synchronised is to add an enum value at the end of the list such as TC_MAX. Then you set the array size to be TC_MAX in size. This way if you add or remove an enum but don't update the array the compiler will complain that there aren't enough/too many initialisers.