如果我这样写:
typedef enum {
foo_1,
foo_2
}foo ;
我发现我可以使用
int footype = foo::foo_1
在 C++ 中
我可以直接使用
int footype = foo_1
在 c 中,
那么有没有一种方法可以编写在 c++ 和 c 中都可以使用的相同代码?代码在一个只有一种结构的头文件中。
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 枚举和作用域枚举,声明为
enum class
对于后者,枚举员资格(::
)是强制性的。对于前者 - 可选。
所以,简单地使用
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