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?
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;
}
Je crois que les valeurs individuelles dans le enum
sont des identifiants à part entière, utilisez simplement:
enum Foo testFunc(){
return BAR;
}
Je pense que certains compilateurs peuvent nécessiter
typedef enum tagFoo
{
BAR,
BAZ,
} Foo;
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;
}