如果我这样写:
typedef enum {
foo_1,
foo_2
}foo ;
我发现我可以使用
c ++中的 int footype = foo::foo_1
我可以直接使用
c中的 int footype = foo_1
那么是否有一种方法可以编写在c ++和c中都能运行的相同代码?代码在一个只有一个结构的头文件中。
答案 0 :(得分:6)
int footype = foo_1;
这将在C和C ++中编译。
int footype = foo::foo_1;
此语法仅适用于C ++ 11的强类型枚举。
答案 1 :(得分:4)
此
int footype = foo::foo_1
仅在C ++ 11中合法。在C ++ 03中,枚举不是范围,这是非法的,就像在C中一样。在C ++ 11中,有两种类型的枚举 - 普通的类C枚举,以及用
声明的作用域枚举 enum class
对于后者,调查员资格(::
)是强制性的。对于前者 - 可选。
所以,简单地使用
int footype foo = foo_1;
适用于所有C,C ++ 03和C ++ 11
答案 2 :(得分:1)
如果你可以放弃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