Existe-t-il une ligne unique qui me permet d'afficher la valeur actuelle d'une énumération?
Réponses
Trop de publicités?En tant que chaîne, non. En tant qu'entier,% d.
À moins que vous ne comptiez:
static char*[] enumStrings = { /* filler 0's to get to the first value, */
"enum0", "enum1",
/* filler for hole in the middle: ,0 */
"enum2", .... };
...
printf("The value is %s\n", enumStrings[thevalue]);
Cela ne fonctionnera pas pour quelque chose comme une énumération de masques de bits. À ce stade, vous avez besoin d'une table de hachage ou d'une autre structure de données plus élaborée.
La bonne réponse à cela a déjà été donnée: non, vous ne pouvez pas donner le nom d'une énumération, seulement sa valeur.
Néanmoins, juste pour le plaisir, cela vous donnera une énumération et une table de recherche tout en un et vous donnera un moyen de l'imprimer par son nom:
principal c:
#include "Enum.h"
CreateEnum(
EnumerationName,
ENUMValue1,
ENUMValue2,
ENUMValue3);
int main(void)
{
int i;
EnumerationName EnumInstance = ENUMValue1;
/* Prints "ENUMValue1" */
PrintEnumValue(EnumerationName, EnumInstance);
/* Prints:
* ENUMValue1
* ENUMValue2
* ENUMValue3
*/
for (i=0;i<3;i++)
{
PrintEnumValue(EnumerationName, i);
}
return 0;
}
Enum.h:
#include <stdio.h>
#include <string.h>
#ifdef NDEBUG
#define CreateEnum(name,...) \
typedef enum \
{ \
__VA_ARGS__ \
} name;
#define PrintEnumValue(name,value)
#else
#define CreateEnum(name,...) \
typedef enum \
{ \
__VA_ARGS__ \
} name; \
const char Lookup##name[] = \
#__VA_ARGS__;
#define PrintEnumValue(name, value) print_enum_value(Lookup##name, value)
void print_enum_value(const char *lookup, int value);
#endif
Enum.c
#include "Enum.h"
#ifndef NDEBUG
void print_enum_value(const char *lookup, int value)
{
char *lookup_copy;
int lookup_length;
char *pch;
lookup_length = strlen(lookup);
lookup_copy = malloc((1+lookup_length)*sizeof(char));
strcpy(lookup_copy, lookup);
pch = strtok(lookup_copy," ,");
while (pch != NULL)
{
if (value == 0)
{
printf("%s\n",pch);
break;
}
else
{
pch = strtok(NULL, " ,.-");
value--;
}
}
free(lookup_copy);
}
#endif
Avertissement: ne faites pas cela.
Un mec a proposé une idée de préprocesseur intelligent dans ce post
http://stackoverflow.com/questions/147267/easy-way-to-use-variables-of-enum-types-as-string-in-c