从C中的函数返回枚举?

时间:2009-04-13 00:24:37

标签: c function enums

如果我在头文件中有类似的内容,如何声明一个返回类型为Foo的枚举的函数?

enum Foo
{
   BAR,
   BAZ
};

我可以做以下事情吗?

Foo testFunc()
{
    return Foo.BAR;
}

或者我需要使用typedef或指针吗?

4 个答案:

答案 0 :(得分:43)

在C ++中,你可以只使用Foo。

在C中,必须使用枚举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;
}

答案 1 :(得分:4)

我相信enum中的各个值本身就是标识符,只需使用:

enum Foo testFunc(){
  return BAR;
}

答案 2 :(得分:2)

我认为某些编译器可能需要

typedef enum tagFoo
{
  BAR,
  BAZ,
} Foo;

答案 3 :(得分:2)

enum Foo
{
   BAR,
   BAZ
};

在C中,返回类型应该在它之前有枚举。当您使用单独的枚举值时,您不会以任何方式限定它们。

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