c: встроенное перечисление с реализацией функции - PullRequest
1 голос
/ 25 января 2012

Я натолкнулся на некоторый код c, в котором есть тип enum, за которым следует реализация функции, например:

enum OGHRet funcX ( OGH *info, void *data, int size )
{
    /* c code that does stuff here */
}

Я запутался из-за того, как этот оператор enum работает в соответствии с реализацией функции.,Я предполагаю, что это возвращаемый тип funcX, но почему он явно объявлен с enum?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 25 января 2012

это просто говорит, что возвращает перечисление с именем OGHRet, которое будет определено в другом месте.

Вот фрагмент кода, который показывает перечисления и функции, которые возвращают перечисления рядом ...

enum Blah { Foo,  Bar };

enum Blah TellMeWhy()
{
   return Bar;
}
1 голос
/ 25 января 2012

Если вы определяете тип перечисления следующим образом:

enum OGHRet { foo, bar };

затем enum OGHRet - это просто имя типа. Вы не можете ссылаться на тип просто как OGHRet; это тег, который виден только после ключевого слова enum.

Единственный способ получить однозначное имя для типа - это использовать typedef, но это на самом деле не обязательно. Если вы настаиваете на возможности вызова типа OGHRet вместо enum OGHRet, вы можете сделать это:

typedef enum { foo, bar } OGHRet;

Здесь тип перечисления объявляется без тега, а затем typedef создает для него псевдоним.

0 голосов
/ 25 января 2012

Вам необходимо ключевое слово enum для определения типа OGHRet. В C ++ вы можете его опустить.

См. и этот вопрос .

0 голосов
/ 25 января 2012

Возможно, потому что он не объявлен как typedef, например:

enum OGHRet
{
 FOO,
 BAR
};

Здесь вам нужно будет сослаться на это enum OGHRet. Чтобы использовать только OGHRet, вам нужно сделать это так:

typedef enum _OGHRet
{
 FOO,
 BAR
}OGHRet;
...