2010-05-26 2 views
1

Я работаю над проектом, в котором я использую значения SysRc как возвращаемые значения из некоторой функции, такой как SUCCESS и FAILURE ond sum enums. Теперь я хочу знать, как их распечатать?Параметры перечисления SysRc в c C++

ответ

1

здание на вершине пост Нила:

Оператор переключателя обычно путь со значениями перечислений в 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

ок спасибо, я просто подумал, если есть способ сделать это. –

+1

коммутатор будет лучше и менее резервным, особенно в gcc, где вы получите хорошее предупреждение о необработанных значениях кода. –

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]); 
} 
Смежные вопросы