私がこのように書いた場合:
typedef enum {
foo_1,
foo_2
}foo ;
使えることがわかりました
int footype = foo::foo_1
C++で
直接使用できます
int footype = foo_1
cでは、
では、c ++とcの両方で機能する同じコードを記述できる方法はありますか?コードは、構造が1つしかない1つのヘッダーファイル内にあります。
int footype = foo_1;
これはCとC++の両方でコンパイルされます。
int footype = foo::foo_1;
この構文は、C++11の強く型付けされた列挙型にのみ必要です。
これ
int footype = foo::foo_1
C++11でのみ有効です。C ++ 03では、列挙型はスコープではなく、Cと同様に、これは違法です。C++ 11では、通常のCのような列挙型とスコープ付き列挙型の2種類の列挙型があります。
enum class
後者の場合、列挙子qualification(::
)は必須です。前者の場合-オプション。
だから、単に使用する
int footype foo = foo_1;
すべてのC、C ++ 03、C++11で動作します
typedefを削除しても問題がない場合は、「正常に機能する」はずです。
enum {
foo_1,
foo_2
};
int
main(void)
{
int foo = foo_1;
return 0;
}
それはgccとg++の両方で私のためにコンパイルされます
g++ --std=c++03 enum.cc -o enum_cpp
gcc --std=c99 enum.c -o enum_c