今天无意间就需要这样的一个功能,从枚举值得到对应的字符串表示,一个容易想到的方法就是再造个字符串数组,和ENUM对应起来,显然这个方法没有可扩展性;第二种方法在stackoverflow上看到的就是巧妙的利用 宏 来生成对应的字符串数组,感觉非常巧妙,易于扩展。下面是这两种方法的代码。
#include<stdio.h> #include<stdlib.h> enum cmd{ CMD_UNSPEC = 0, CMD_ADD, CMD_SUB, CMD_MULTI, CMD_DIV, }; static inline char * cmd_str(enum cmd c){ static const char *strings[] = {"CMD_UNSPEC", "CMD_ADD", "CMD_SUB", "CMD_MULTI", "CMD_DIV", }; return strings[c]; } int main(void){ printf("%s\n", cmd_str(CMD_ADD)); exit(0); }
方法2:
#include<stdio.h> #include<stdlib.h> /*将相应的枚举类型转为字符串(这种方法很重要)*/ #define FOREACH_CMD(CMD) CMD(CMD_UNSPEC) CMD(CMD_ADD) CMD(CMD_SUB) CMD(CMD_MULTI) #define GENERATE_ENUM(ENUM) ENUM, #define GENERATE_STRING(STRING) #STRING, enum CMD_ENUM { FOREACH_CMD(GENERATE_ENUM) }; static const char *CMD_STRING[] = { FOREACH_CMD(GENERATE_STRING) }; int main(void){ printf("%s\n", CMD_STRING[CMD_ADD]); exit(0); }
时间: 2024-07-29 09:01:34