typedef enum, assignant une valeur à l'intérieur
de la compilation avec gcc C99
J'ai été en utilisant les énumérations pour un certain temps maintenant. Cependant, je suis en utilisant un exemple de code pour développer mon application. Et je suis tombé sur un code de ce genre. J'ai été informé de ce est les meilleures pratiques dans l'utilisation lors de l'utilisation des enums. Mais je ne vois pas en quoi cela a des avantages.
typedef enum {
TYPE_DATE,
TYPE_TIME,
TYPE_MONEY,
TYPE_COUNT,
TYPE_UNKNOWN = TYPE_COUNT
} string_type_e;
Pourquoi les TYPE_COUNT
et pourquoi attribuer TYPE_COUNT
à TYPE_UNKNOWN
?
Un grand merci pour toutes les suggestions,
source d'informationauteur ant2009
Vous devez vous connecter pour publier un commentaire.
Par défaut, les énumérations sont automatiquement donné des valeurs entières de 0 par le compilateur. Si la date sera égal à zéro, le temps de l'un et de l'argent deux. La valeur suivante est donnée à l' 'pseudo' valeur d'enum
TYPE_COUNT
qui vous permettra d'atteindre compte tenu de la valeur de trois, qui se trouve être le nombre de " bon " les valeurs de l'enum.TYPE_UNKNOWN
est une autre valeur qui représente quelque chose qui n'est pas un " bon " de la valeur, donc va échouer à un teste < TYPE_COUNT
. Ayant égal àTYPE_COUNT
signifie que chaque valeur raisonnable est contiguë, mais je ne suis pas au courant d'aucun avantage significatif pour que (il y en aurait siTYPE_COUNT
était une de moins qu'une puissance de 2, ce qui peut avoir des effets quelle représentation le compilateur peut utiliser, et sa "gentil" pour avoir les valeurs contiguës, mais il n'a pas vraiment d'importance, comme vous ne serait pas incrément de leur passéTYPE_COUNT
de toute façon)Les valeurs de l'Enum sont essentiellement des constantes entières. Par défaut, ils sont donné la valeur du dernier élément de l'enum + 1 (et 0 pour le premier élément). Lorsque vous voulez compter les éléments qui pourraient être utiles pour la cartographie avec un tableau ou quelque chose, de l'enum déclarée comme ça (qui sera mis à jour de façon dynamique si vous ajoutez ou supprimez quelque chose), vous pouvez mettre un nombre constant à la fin de celui-ci (
TYPE_COUNT
dans votre exemple). Pour être en mesure de distinguer les valeurs non valides dans l'enum, vous pouvez déclarer une autre constante. Dans votre exemple, la constante sera égal au nombre constant, ce qui est une valeur plus grande que la plus grande valeur de votre enum.De garder un onglet sur la valeur maximale autorisée pour un
enum
. Rappelez-vous, il n'y aurait sinon aucun moyen de vérifier si une valeur donnée est correcte (au sein de la gamme) ou pas.TYPE_COUNT peut servir à la dimension d'un tableau indexé par les enum éléments:
ou peuvent être utilisés dans une condition de sortie d'une boucle for.
TYPE_UNKNOWN peut être utilisé pour représenter un illégales ou valeur non définie pour le type (-1 pourrait être une alternative à TYPE_COUNT pour sa valeur).