Entrar    Registrar

Ajudando um Javeiro.

Programação C em geral

Moderadores: guest2003, 51

  • Autor
    Mensagem

Ajudando um Javeiro.

Mensagempor Aquino » 23 Ago 2017 14:57

Um programador em Java me perguntou:
"Em C não há reflexão, como faço pra retornar o nome de um valor de uma enumeração?"
Falei, como C não tem reflexão você pode fazer:
Código: Selecionar todos
typedef enum{
  ABOBORA=0,
  POLENTA=7,
  SUCRILHO
}eTIPO;

const char* names_of_eTIPO[]={
  [] = "ABOBORA",
  [7] =  "POLENTA",
  [8] = SUCRILHO
};



Ele falou que é gambiarra.... :cry:
"...People who are really serious about software should make their own hardware..." Alan Kay
Avatar do usuário
Aquino
Dword
 
Mensagens: 1646
Registrado em: 12 Out 2006 22:24

Re: Ajudando um Javeiro.

Mensagempor Aquino » 23 Ago 2017 14:58

ops, faltou o consumo

Código: Selecionar todos
#define ENUM_TO_STR(X)         (char*)names_of_enum[X]

ou

char* eTIPO_to_Str(eTIPO tipo){

return (char*)names_of_enum[tipo];
}

"...People who are really serious about software should make their own hardware..." Alan Kay
Avatar do usuário
Aquino
Dword
 
Mensagens: 1646
Registrado em: 12 Out 2006 22:24

Re: Ajudando um Javeiro.

Mensagempor chipselect » 27 Ago 2017 10:30

Uso muito reflexão em C# e Java, mas em C não fica meio "estranho"?

De qualquer forma, reflexão em C/C++ geralmente é penoso, mas tem gente fazendo.

Uma outra opção também é juntar metadata pra usar na enumeração, fazemos isso usando annotations em C# e Java, mas no C teria que usar algumas bibliotecas, como essa aqui:
https://github.com/alexanderchuranov/Metaresc
chipselect
Word
 
Mensagens: 697
Registrado em: 16 Out 2006 18:50

Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: denis e 2 visitantes