枚举类型和C 中的用法

ENUM types and usage in c and c++

本文关键字:用法 类型 枚举      更新时间:2023-10-16

如果我写的话:

typedef enum {
  foo_1,
  foo_2
}foo ;

我发现我可以使用

int footype = foo::foo_1 in 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