【问题标题】:Returning an enum from a function in C?从 C 中的函数返回枚举?
【发布时间】:2009-04-13 00:24:36
【问题描述】:

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

enum Foo
{
   BAR,
   BAZ
};

我可以做如下的事情吗?

Foo testFunc()
{
    return Foo.BAR;
}

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

【问题讨论】:

    标签: c function enums


    【解决方案1】:

    在 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;
    }
    

    【讨论】:

    • 人们不喜欢 C++ 的另一个原因
    【解决方案2】:

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

    enum Foo testFunc(){
      return BAR;
    }
    

    【讨论】:

    • 在 C 中,它需要 enum Foo;在 C++ 中,只要 Foo 就可以了。
    • 谢谢。或者我想 Kenny 建议的类型 def。
    • 是的 - 否则 typedef 会起作用,但在 C++ 中是“自动”的,但在 C 中必须手动创建。
    【解决方案3】:

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

    typedef enum tagFoo
    {
      BAR,
      BAZ,
    } Foo;
    

    【讨论】:

    • C 编译器会接受带有 typedef 的函数; C++ 编译器不需要它。
    【解决方案4】:
    enum Foo
    {
       BAR,
       BAZ
    };
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 2017-10-03
      • 2014-10-26
      • 1970-01-01
      相关资源
      最近更新 更多