我看过这个链接
How to convert enum names to string in c
我在客户端提供的库头文件中以下列方式定义了一系列enums
(我无法更改):
此外,枚举也很稀疏。
typedef enum
{
ERROR_NONE=59,
ERROR_A=65,
ERROR_B=67
}
我想在我的函数中打印这些值,例如我想打印ERROR_NONE
而不是59
。有没有更好的方法来使用switch
case
或if else
构造来完成这项工作?
示例
int Status=0;
/* some processing in library where Status changes to 59 */
printf("Status = %d\n",Status); /* want to print ERROR_NONE instead of 59 */
答案 0 :(得分:3)
直接应用字符串化运算符可能会有所帮助
#define stringize(x) #x
printf("%s\n", stringize(ERROR_NONE));
您已经提到您无法更改库文件。如果您另有决定:),您可以使用X
宏,如下所示
enumstring.c
#include <stdio.h>
#define NAMES C(RED)C(GREEN)C(BLUE)
#define C(x) x,
enum color { NAMES TOP };
#undef C
#define C(x) #x,
const char * const color_name[] = { NAMES };
int main( void )
{ printf( "The color is %s.\n", color_name[ RED ]);
printf( "There are %d colors.\n", TOP ); }
stdout
The color is RED.
There are 3 colors.
了解更多here
编辑:根据您向我们展示的具体示例,我担心,switch-case
是您可以获得的最近,尤其是当您有稀疏enums
时。
答案 1 :(得分:1)
FAQ 11.17。使用xstr()
宏。您应该使用它:
#define str(x) #x
#define xstr(x) str(x)
printf("%s\n", xstr(ERROR_A));