web-dev-qa-db-fra.com

Retourner une énumération d'une fonction en C?

Si j'ai quelque chose comme ce qui suit dans un fichier d'en-tête, comment déclarer une fonction qui renvoie une énumération de type Foo?

enum Foo
{
   BAR,
   BAZ
};

Puis-je simplement faire quelque chose comme ce qui suit?

Foo testFunc()
{
    return Foo.BAR;
}

Ou dois-je utiliser des typedefs ou des pointeurs ou quelque chose?

26
Paul Wicks

En C++, vous pouvez utiliser simplement Foo.

En C, vous devez utiliser enum Foo jusqu'à ce que vous lui fournissiez un typedef.

Et puis, lorsque vous faites référence à BAR, vous n'utilisez pas Foo.BAR mais juste BAR. Toutes les constantes d'énumération partagent le même espace de noms (l'espace de noms "identificateurs ordinaires", utilisé par les fonctions, les variables, etc.).

D'où (pour C):

enum Foo { BAR, BAZ };

enum Foo testFunc(void)
{
    return BAR;
}

Ou, avec un typedef:

typedef enum Foo { BAR, BAZ } Foo;

Foo testFunc(void)
{
    return BAR;
}
45
Jonathan Leffler

Je crois que les valeurs individuelles dans le enum sont des identifiants à part entière, utilisez simplement:

enum Foo testFunc(){
  return BAR;
}
4
dmckee

Je pense que certains compilateurs peuvent nécessiter

typedef enum tagFoo
{
  BAR,
  BAZ,
} Foo;
2
kenny
enum Foo
{
   BAR,
   BAZ
};

En C, le type de retour devrait avoir enum avant. Et lorsque vous utilisez les valeurs d'énumération individuelles, vous ne les qualifiez en aucune façon.

enum Foo testFunc()
{
    enum Foo temp = BAR;
    temp = BAZ;
    return temp;
}
2
Brian R. Bondy