2010-05-26 44 views
1

我正在一个项目中,我正在使用SysRc值作为返回值从一些函数,如SUCCESS和FAILURE和枚举sum枚举。 现在我想知道如何让他们打印?在c C++的SysRc枚举值

回答

1

大厦:

switch语句通常要在C++枚举值的方式。您可以使用#define -macros节省一些写作工作,但我个人会避免它们。

enum E { foo, bar }; 
const char * ToStr(E e) { 
    switch(e) { 
    case foo: return "foo"; 
    case bar: return "bar"; 
    }; 
    throw std::runtime_error("unhandled enum-value"); // xxx 
} 

gcc会警告您未处理的案例值。

0

无法直接在C或C++中执行此操作 - 您必须编写将枚举值作为参数并将其转换为字符串的函数。尼尔的帖子顶上

enum E { foo, bar }; 

const char * ToStr(E e) { 
    if (e == foo) { 
      return "foo"; 
    } 
    else { 
     return "bar"; 
    } 
} 
+0

好,谢谢,我只是想如果有什么办法的话。 – 2010-05-26 12:07:14

+1

一个开关会更好,更少冗余,特别是在gcc中,你可以在未处理的case值上得到一个很好的警告。 – 2010-05-26 12:09:22

0

正如其他人所说,你不能得到枚举名称。然而,你可以使用X-宏来生成两个枚举和字符串数组:

在colours.h:

#define COLOUR_VALUES \ 
    X(RED) \ 
    X(BLUE) \ 
    X(YELLOW) 

#define X(a) a, 
typedef enum { 
    COLOUR_VALUES 
} colour_t; 
#undef X 

extern char *colour_names[]; 

在colours.c:

#include "colours.h" 

#define X(a) #a, 
char *colour_names[] = { 
    COLOUR_VALUES 
}; 
#undef X 

void print_colour(colour_t colour) 
{ 
    printf("%s\n", colour_names[colour]); 
}