ヘッダーファイルに次のようなものがある場合、Foo型の列挙型を返す関数をどのように宣言しますか?
enum Foo
{
BAR,
BAZ
};
次のようなことはできますか?
Foo testFunc()
{
return Foo.BAR;
}
または、typedefやポインタなどを使用する必要がありますか?
C++では、Foo
だけを使用できます。
Cでは、typedefを提供するまでenum Foo
を使用する必要があります。
そして、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;
}
enum
の個々の値はそれ自体が識別子であると信じています。
enum Foo testFunc(){
return BAR;
}
一部のコンパイラには
typedef enum tagFoo
{
BAR,
BAZ,
} Foo;
enum Foo
{
BAR,
BAZ
};
Cでは、戻り値の型の前に列挙型が必要です。また、個々の列挙値を使用する場合、それらを修飾することはありません。
enum Foo testFunc()
{
enum Foo temp = BAR;
temp = BAZ;
return temp;
}