Renvoyer 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 retourne une énumération de type Foo?

enum Foo { BAR, BAZ }; 

Puis-je faire quelque chose comme ce qui suit?

 Foo testFunc() { return Foo.BAR; } 

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

    En C ++, vous pouvez utiliser uniquement Foo.

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

    Et puis, lorsque vous vous référez à BAR, vous n’utilisez pas Foo.BAR mais juste BAR . Toutes les constantes d’énumération partagent le même espace de noms.

    Donc (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 l’ enum sont des identificateurs à 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 doit avoir enum avant. Et lorsque vous utilisez les valeurs individuelles enum, vous ne les qualifiez en aucune manière.

     enum Foo testFunc() { enum Foo temp = BAR; temp = BAZ; return temp; }