c:带有函数实现的内联枚举
我遇到过一些c代码,其中有一个枚举类型,后跟一个函数实现,例如:c:带有函数实现的内联枚举,c,enums,inline,C,Enums,Inline,我遇到过一些c代码,其中有一个枚举类型,后跟一个函数实现,例如: enum OGHRet funcX ( OGH *info, void *data, int size ) { /* c code that does stuff here */ } 我对enum语句如何与函数实现内联工作感到困惑。 我假设它是funcX的返回类型,但为什么要用enum显式声明呢 提前感谢。只是说它返回了一个名为OGHRet的枚举,该枚举将在别处定义 下面是一段代码,显示并排返回枚举的枚举和函数 enum
enum OGHRet funcX ( OGH *info, void *data, int size )
{
/* c code that does stuff here */
}
我对enum语句如何与函数实现内联工作感到困惑。
我假设它是funcX的返回类型,但为什么要用enum显式声明呢
提前感谢。只是说它返回了一个名为OGHRet的枚举,该枚举将在别处定义 下面是一段代码,显示并排返回枚举的枚举和函数
enum Blah { Foo, Bar };
enum Blah TellMeWhy()
{
return Bar;
}
可能是因为它没有声明为typedef,如下所示:
enum OGHRet
{
FOO,
BAR
};
typedef enum _OGHRet
{
FOO,
BAR
}OGHRet;
enum OGHRet { foo, bar };
在这里,您需要通过enum OGHRet
来引用它。
要仅使用OGHRet,您需要这样做:
enum OGHRet
{
FOO,
BAR
};
typedef enum _OGHRet
{
FOO,
BAR
}OGHRet;
enum OGHRet { foo, bar };
您需要使用
enum
关键字为OGHRet
提供类型定义。在C++中,你可以省略它。
请参见。如果您定义如下枚举类型:
enum OGHRet
{
FOO,
BAR
};
typedef enum _OGHRet
{
FOO,
BAR
}OGHRet;
enum OGHRet { foo, bar };
然后,enum OGHRet
只是类型的名称。不能将类型引用为OGHRet
;这是一个标记,仅在enum
关键字之后可见
为类型指定一个单词名称的唯一方法是使用typedef,但实际上没有必要这样做。如果您坚持能够调用类型OGHRet
,而不是enum OGHRet
,则可以执行以下操作:
typedef enum { foo, bar } OGHRet;
此处声明的枚举类型没有标记,然后typedef为其创建别名。以下划线开头,后跟大写字母的名称保留用于实现,最好不要在代码中使用它们。枚举类型定义位于其他位置,这似乎是合理的,尚未找到。它的意思是,该类型已在其他地方定义。标准C中不允许引用不完整的枚举类型(尽管某些编译器可能允许将其作为扩展)。