2010-05-26 42 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]); 
}