Возвращая перечисление из функции в C? - PullRequest
26 голосов
/ 13 апреля 2009

Если у меня есть что-то вроде следующего в заголовочном файле, как мне объявить функцию, которая возвращает перечисление типа Foo?

enum Foo
{
   BAR,
   BAZ
};

Могу ли я просто сделать что-то вроде следующего?

Foo testFunc()
{
    return Foo.BAR;
}

Или мне нужно использовать typedefs или указатели или что-то еще?

Ответы [ 4 ]

43 голосов
/ 13 апреля 2009

В 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;
}
4 голосов
/ 13 апреля 2009

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

enum Foo testFunc(){
  return BAR;
}
2 голосов
/ 13 апреля 2009
enum Foo
{
   BAR,
   BAZ
};

В C тип возврата должен иметь enum перед ним. А когда вы используете индивидуальные значения перечисления, вы никоим образом их не квалифицируете.

enum Foo testFunc()
{
    enum Foo temp = BAR;
    temp = BAZ;
    return temp;
}
2 голосов
/ 13 апреля 2009

Я думаю, что некоторые компиляторы могут потребовать

typedef enum tagFoo
{
  BAR,
  BAZ,
} Foo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...