switchcase后接枚举(⽤于判断字符串常量)c/c++ 语⾔不允许后⾯直接接字符串。
c/c++ 语⾔case后⾯只允是整型、常量或表达式,例如:
int k=3;
switch(k)
{
case 'd'-'a':
printf("d-a\n");
break;
case 4 :
printf("4\n");
break;
case 'Z' :
printf("Z\n");
break; //单引号括起的是字符常量,是整型。
}
上⾯⽤的都是整型常量表达式,所以正确。
字符串常量,例如:双引号括起的 "Z", 虽然是常量,但它们不是整型,所以不允许。
其它语⾔,要看它们⾃⼰的规定。
我们可以利⽤结构体及枚举,使switch case可以⽤来判断字符串常量
typedef enum {
oBadOption,
oDaemon,
switch case判断字符串
oDebugLevel,
oExternalInterface,
} OpCodes;
static const struct {
const char *name;
OpCodes opcode;
} keywords[] = {
{ "daemon", oDaemon },
{ "debuglevel", oDebugLevel },
{ "externalinterface", oExternalInterface },
{ NULL, oBadOption },
};
static OpCodes config_parse_token(const char *cp)
{
int i;
for (i = 0; keywords[i].name; i++)
if (strcasecmp(cp, keywords[i].name) == 0)
return keywords[i].opcode;
debug(LOG_ERR, "Bad configuration option is NULL");
return oBadOption;
}
int opcode = config_parse_token("daemon");
switch(opcode)
{
case oDaemon:
if (config.daemon == -1 && ((value = parse_boolean_value(p1)) != -1)) {
config.daemon = value;
}
break;
case oExternalInterface:
break;
case oGatewayID:
config.gw_id = safe_strdup(p1);
break;
case oBadOption:
debug(LOG_ERR, "");
break;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论