有没有一种方法声明一个函数参数,使其接受匿名枚举类型作为输入?

8
如果我有一个匿名枚举,是否有任何方法可以将该类型的值传递给函数?例如:
typedef struct {
    enum { On, Off } status;
    int max_amps;
} SWITCH;

void make_switches(){
    SWITCH switch1 = createSwitch( On, 15 );
    SWITCH switch2 = createSwitch( Off, 20 );
}

SWITCH* createSwitch( ??? status, int max_amps ){
    SWITCH* new_switch = malloc( sizeof( SWITCH ) );
    new_switch->status = status;
    new_switch->max_amps = max_amps;
    return new_switch;
}

我想将匿名枚举的值传递到createSwitch()函数中。有没有办法做到这一点?

1
我相信你已经想到了这一点,但我的建议是将“枚举”提升为全局命名类型。 - Tom Karzes
3
当然,你可以使用SWITCH *createSwitch(int status...)函数。 - Mark Benningfield
枚举的值类似于整数,您可以将“状态”视为任何类型的整数。 - liamcomp
1
typeof(On) 替换 ??? 是一个非常糟糕的想法,原因有很多,其中最重要的是它没有在 C 规范中提到。参见:https://dev59.com/hGct5IYBdhLWcg3wc9Eg - user3386109
@user3386109:我想我是瞎了,你在哪里看到typeof(On) - Mark Benningfield
显示剩余2条评论
1个回答

10

正如其他人所建议的那样,您可以在???的位置上简单地使用int

这是因为根据C11标准(委员会草案)的6.7.2.2/3

枚举列表中的标识符被声明为具有类型int的常量,并且可以出现在允许此类常量的任何位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接