Reputation: 65550
If I have something like the following in a header file, how do I declare a function that returns an enum of type Foo?
enum Foo
{
BAR,
BAZ
};
Can I just do something like the following?
Foo testFunc()
{
return Foo.BAR;
}
Or do I need to use typedefs or pointers or something?
Upvotes: 37
Views: 98176
Reputation: 753990
In C++, you could use just Foo
.
In C, you must use enum Foo
until you provide a typedef for it.
And then, when you refer to BAR
, you do not use Foo.BAR
but just BAR
. All enumeration constants share the same namespace (the “ordinary identifiers” namespace, used by functions, variables, etc).
Hence (for C):
enum Foo { BAR, BAZ };
enum Foo testFunc(void)
{
return BAR;
}
Or, with a typedef
:
typedef enum Foo { BAR, BAZ } Foo;
Foo testFunc(void)
{
return BAR;
}
Upvotes: 70
Reputation: 101181
I believe that the individual values in the enum
are identifiers in their own right, just use:
enum Foo testFunc(){
return BAR;
}
Upvotes: 5
Reputation: 347256
enum Foo
{
BAR,
BAZ
};
In C, the return type should have enum before it. And when you use the individual enum values, you don't qualify them in any way.
enum Foo testFunc()
{
enum Foo temp = BAR;
temp = BAZ;
return temp;
}
Upvotes: 2
Reputation: 22344
I think some compilers may require
typedef enum tagFoo
{
BAR,
BAZ,
} Foo;
Upvotes: 2