Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c:带有函数实现的内联枚举_C_Enums_Inline - Fatal编程技术网

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

我遇到过一些c代码,其中有一个枚举类型,后跟一个函数实现,例如:

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中不允许引用不完整的枚举类型(尽管某些编译器可能允许将其作为扩展)。