Il existe un autre moyen qui ne repose pas sur le nombre de lignes ou les modèles. La seule exigence est de placer les valeurs de l'enum dans leur propre fichier et de faire en sorte que le préprocesseur/compilateur fasse le compte comme ceci :
mon_enum_inc.h
ENUMVAL(BANANA)
ENUMVAL(ORANGE=10)
ENUMVAL(KIWI)
...
#undef ENUMVAL
mon_enum.h
typedef enum {
#define ENUMVAL(TYPE) TYPE,
#include "my_enum_inc.h"
} Fruits;
#define ENUMVAL(TYPE) +1
const size_t num_fruits =
#include "my_enum_inc.h"
;
Cela vous permet d'ajouter des commentaires aux valeurs de l'énumération, de réaffecter les valeurs et de ne pas injecter une valeur d'énumération "count" invalide qui doit être ignorée ou prise en compte dans le code.
Si vous ne vous souciez pas des commentaires, vous n'avez pas besoin d'un fichier supplémentaire et pouvez faire comme quelqu'un d'autre l'a mentionné plus haut, par exemple :
#define MY_ENUM_LIST \
ENUMVAL(BANANA) \
ENUMVAL(ORANGE = 7) \
ENUMVAL(KIWI)
et remplacer le #include "my_enum_inc.h"
avec MY_ENUM_LIST mais vous devrez #undef ENUMVAL
après chaque utilisation.