ENUM类型和c和c ++中的用法

时间:2012-11-07 15:11:19

标签: c++ c enums

如果我这样写:

typedef enum {
  foo_1,
  foo_2
}foo ;

我发现我可以使用

c ++中的

int footype = foo::foo_1

我可以直接使用

c中的

int footype = foo_1

那么是否有一种方法可以编写在c ++和c中都能运行的相同代码?代码在一个只有一个结构的头文件中。

3 个答案:

答案 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