ヘッダーファイルに次のようなものがある場合、Foo型の列挙型を返す関数をどのように宣言しますか?Cの関数から列挙型を返しますか?
enum Foo
{
BAR,
BAZ
};
次のようにすればいいですか?
Foo testFunc()
{
return Foo.BAR;
}
また、typedefやポインタなどを使用する必要がありますか?
ヘッダーファイルに次のようなものがある場合、Foo型の列挙型を返す関数をどのように宣言しますか?Cの関数から列挙型を返しますか?
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;
}
私は、いくつかのコンパイラはCで
typedef enum tagFoo
{
BAR,
BAZ,
} Foo;
Cコンパイラはtypedefを指定してその関数を受け入れます。 C++コンパイラはそれを必要としません。 –
enum Foo
{
BAR,
BAZ
};
を必要とするかもしれないと思います戻り値の型はその前にenumを持つべきです。また、個々の列挙値を使用する場合、それらを修飾することはありません。
enum Foo testFunc()
{
enum Foo temp = BAR;
temp = BAZ;
return temp;
}
Cにおいて、それが列挙はFooを必要とします。 C++では、Fooだけでも問題ありません。 –
ありがとうございます。ケニーが示唆しているタイプの違いだと思います。 – dmckee
はい - またはtypedefは動作しますが、C++では 'automatic'ですが、Cでは手動で作成する必要があります。 –