使用枚举类型可以考虑C中的一个好习惯吗?

时间:2013-05-17 19:29:10

标签: c enums

考虑以下示例:

enum my_enum
{
    ENUMERATER_1,
    ENUMERATER_2,
    ENUMERATER_TOTAL,
}
typedef enum my_enum my_enum_t                 // just if using option 2

static int use_my_enum(int myenum);            // 1
static int use_my_enum(my_enum_t myenum);      // 2
static int use_my_enum(enum my_enum myenum);   // 3

哪种选择可以考虑最佳做法,1,2或3?

事先我的意见是,您应该始终使用int类型,因为标准enumsint,您可以为enum类型分配任何值,如果您使用任何其他选项,您可能会产生一种错觉,即如果您的论证有效,则无需测试。使用int作为enum参数的类型,更清楚的是您应该始终确认输入参数。

我发现可能有理由使用enum作为所有其他程序语言的类型,但不能用于C,有没有理由认为选项2或3比1更好的做法?

结论: 由于没有技术问题,因此确认这只是个人偏好并不是错误的。无论如何,我会重新考虑我的第一个假设,并因为可读性而将选项#3作为稍微好一些的做法。

2 个答案:

答案 0 :(得分:5)

我愿意:

typedef enum
{
    ENUMERATER_1,
    ENUMERATER_2,
    ENUMERATER_TOTAL,
} my_enum;

此外,以_t结尾的类型名称将保留用于下一个POSIX标准。

答案 1 :(得分:3)

使用其中任何一个都没有任何内在错误。

使用现代IDE,如果它是一个好的,第二个是我想要的。

第一个也很好,但你可能会发现人们“假装”而不是使用实际值。例如,抛出4 in作为参数,它可能会导致不良行为。

归结为个人偏好。你可能会发现大多数人更喜欢#2。