以下是我想做的:

typedef enum { ONE, TWO, THREE } Numbers;

我正在try 编写一个函数,该函数将执行类似以下的切换情况:

char num_str[10];
int process_numbers_str(Numbers num) {
  switch(num) {
    case ONE:
    case TWO:
    case THREE:
    {
      strcpy(num_str, num); //some way to get the symbolic constant name in here?
    } break;
    default:
      return 0; //no match
  return 1;
}

除了在每种情况下都进行定义之外,有没有一种方法可以像我上面try 的那样使用enum变量来设置它?

推荐答案

没有内置的解决方案.最简单的方法是使用一个char*的数组,其中枚举的int值索引到一个包含该枚举的描述性名称的字符串.如果您有一个稀疏enum(不是从0开始的,或者在编号上有间隙),其中int个映射中的一些映射足够高,因此无法使用基于数组的映射,那么您可以使用哈希表.

C++相关问答推荐

数组元素的编号索引

以c格式打印时间戳

当多个线程在C中写入相同的文件描述符时,如何防止争用情况?

为什么GCC C23中的关键字FALSE不是整数常量表达式?

为什么我不能只在内存地址中添加一个int来寻址任何数组?

判断X宏的空性

为什么memcpy进入缓冲区和指向缓冲区的指针工作相同?

在每种If-Else情况下执行语句的最佳方式

Vcpkg的配置文件

用gcc-msse 2编译的C程序包含AVX 1指令

将回调/基于事件的C API转换为非回调API

如何将两个uint32_t值交织成一个uint64_t?

STM32 FATFS用户手册(Um1721)中的代码正确吗?

正在try 理解C++中的`正在释放的指针未被分配‘错误

我编写这段代码是为了判断一个数字是质数、阿姆斯特朗还是完全数,但由于某种原因,当我使用大数时,它不会打印出来

C: NULL>;NULL总是false?

模仿 memmove 的行为

10 个字节对于这个 C 程序返回后跳行的能力有什么意义

malloc 属性不带参数

C99 的 %zu 格式说明符不起作用