Cの関数から列挙型を返しますか?

C++ では、Foo だけを使用できます。 .

C では、enum Foo を使用する必要があります typedef を提供するまで。

そして、 BAR を参照すると 、あなたは Foo.BAR を使用しません でも BAR だけ .すべての列挙定数は、同じ名前空間 (関数、変数などで使用される「通常の識別子」名前空間) を共有します。

したがって (C の場合):

enum Foo { BAR, BAZ };

enum Foo testFunc(void)
{
    return BAR;
}

または、typedef で :

typedef enum Foo { BAR, BAZ } Foo;

Foo testFunc(void)
{
    return BAR;
}

enum の個々の値は はそれ自体が識別子です。次を使用してください:

enum Foo testFunc(){
  return BAR;
}

一部のコンパイラでは必要になると思います

typedef enum tagFoo
{
  BAR,
  BAZ,
} Foo;