我有一个枚举:
enum myenum{
typeA,
typeB,
typeC
} myenum_t;
Run Code Online (Sandbox Code Playgroud)
然后,使用enum参数调用函数:
int myfunction(myenum_t param1)
{
switch(param1)
{
case typeA:
case typeB:
case typeC:
//do the work
break;
default:
printf("Invalid parameter");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,随着myenum_t越来越多的价值观的增长,myfunction似乎并不那么优雅.
有没有更好的方法来检查枚举是否有效?
Pau*_*l R 18
一个常见的惯例是做这样的事情:
typedef enum {
typeA,
typeB,
typeC,
num_types
} myenum_t;
Run Code Online (Sandbox Code Playgroud)
然后你可以检查(t < num_types).
如果您随后添加更多枚举,例如
typedef enum {
typeA,
typeB,
typeC,
typeD,
typeE,
num_types
} myenum_t;
Run Code Online (Sandbox Code Playgroud)
然后num_types自动更新,您的错误检查代码不需要更改.
您可以使用按位枚举:
enum myEnum {
typeA = 1 << 0;
typeB = 1 << 1;
typeC = 1 << 2;
}
int myFunction(myEnum arg1)
{
int checkVal = typeA | typeB | typeC;
if (checkVal & arg1)
{
// do work here;
}
else
{
printf("invalid argument!");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对不起,我觉得这个问题看错了.
看来你想要做的是确定你是否传入了适当的值,而不是一些随机的无效选项.在这种情况下,最合乎逻辑的选择是:
if (arg1 < typeA || arg1 > typeC)
printf("invalid argument");
Run Code Online (Sandbox Code Playgroud)
当然,这是假设您没有为枚举设置手动值,除非使用按位枚举,否则这很少见.
| 归档时间: |
|
| 查看次数: |
20142 次 |
| 最近记录: |