Página 1 de 1

Ajudando um Javeiro.

MensagemEnviado: 23 Ago 2017 14:57
por Red Neck Guy
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:

Re: Ajudando um Javeiro.

MensagemEnviado: 23 Ago 2017 14:58
por Red Neck Guy
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];
}


Re: Ajudando um Javeiro.

MensagemEnviado: 27 Ago 2017 10:30
por chipselect
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