Подтвердить что ты не робот

Возврат перечисления из функции в C?

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

enum Foo
{
   BAR,
   BAZ
};

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

Foo testFunc()
{
    return Foo.BAR;
}

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

4b9b3361

Ответ 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;
}

Ответ 2

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

enum Foo testFunc(){
  return BAR;
}

Ответ 3

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

typedef enum tagFoo
{
  BAR,
  BAZ,
} Foo;

Ответ 4

enum Foo
{
   BAR,
   BAZ
};

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

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