Éviter les collisions de noms avec enum en C (C99)

enum éléments les noms sont sensibles à des doublons et entrent en collision avec deux autres enum éléments les noms, les noms de variables, etc...

enum Fruit
{
    apple,
    orange
};
typedef enum Fruit Fruit;


enum Color
{
    red,
    orange //<-- ERROR
};
typedef enum Color Color;


char apple='a'; //<-- ERROR

Est-il un C99 solution conforme à éviter la collision autres que de préfixer chaque enum nom de l'élément?


Note de côté: cette question a déjà une réponse pour le C++

Comment éviter les conflits de nom pour deux valeurs enum avec le même nom en C++?

Je suis à la recherche d'un C99 solution.

  • Oui, utiliser un nom approprié comme color_orange et fruit_orange. Il faut également éviter la confusion lors de la lecture.
  • Est-il [...] la solution de autres que de préfixer chaque enum nom de l'élément ?
  • Peut-être, mais ce serait probablement une mauvaise solution, c'est une bonne solution qui permet de lisibilité trop.
  • est-il rien de mieux lisible que Fruit f = orange; et Color c = orange; ? C'est bien rangé et sans doute que f est un fruit et c une couleur
  • Oui Fruit fruit = FruitOrange;. Oh, et dans ce cas switch (fruit) {case FruitOrange: break ...}. Si il ya beaucoup de fruits, vous serez heureux de les préfixer. Aussi f peut être pour file, f**ck, et de nombreux autres wrods qui commencent par f fruit, au contraire, est tout simplement fruit.
  • c'est laid! 🙂 mais bien sûr, si c'est la seule solution que je vais aller avec ça. "Il n'y a pas de solution pour que" (si vrai) peut être une réponse appropriée.
  • Ce n'est pas laid Fuirt f = orange; est moche, pourquoi ne pas faire Fruit f = o; trop et raccourcir de plus pour le rendre encore meilleur?
  • Je ne comprends pas la question entièrement. Voulez-vous référer à des entités différentes avec le même nom?

InformationsquelleAutor Paolo | 2016-02-13