Возврат перечисления из функции в C?
Если в заголовочном файле есть что-то вроде следующего: как объявить функцию, которая возвращает перечисление типа Foo?
enum Foo
{
BAR,
BAZ
};
Могу ли я просто сделать что-то вроде следующего?
Foo testFunc()
{
return Foo.BAR;
}
Или мне нужно использовать typedefs или указатели или что-то еще?
Ответы
Ответ 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;
}