switch case后接枚举(用于判断字符串常量)
来源:互联网 发布:学编程怎么赚钱 编辑:程序博客网 时间:2024/05/17 02:11
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,
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:
config.external_interface = safe_strdup(p1);
break;
case oGatewayID:
config.gw_id = safe_strdup(p1);
break;
case oBadOption:
debug(LOG_ERR, "Exiting...");
break;
}
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,
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:
config.external_interface = safe_strdup(p1);
break;
case oGatewayID:
config.gw_id = safe_strdup(p1);
break;
case oBadOption:
debug(LOG_ERR, "Exiting...");
break;
}
0 0
- switch case后接枚举(用于判断字符串常量)
- switch case语句case后的枚举常量不带枚举类型
- java switch case 用于字符串的方法
- switch-case可以对枚举类型进行流转判断
- switch(整数表达式/枚举常量)
- 条件判断if 和 case...esac 判断(相当于switch)
- switch case判断成绩等级
- 字面量常量运算符,switch case 字符串的简单举例,constexpr使用详解
- 枚举与switch字符串
- switch的case分支中引用常量
- 枚举类型 和 if switch case
- switch case break default 判断语句
- boolean值及switch case判断
- 判断语句switch - case 和if - else
- C++ 中 switch case语句 处理字符串
- library工程switch case 报错 需要常量表达式
- switch(expr1)char byte short int [整数表达式或者枚举常量]
- switch()case的用法
- python数据库备份
- POJ 2492 A Bug's Life
- 排序算法——冒泡排序
- c++:vector
- 出自网易,必是精品
- switch case后接枚举(用于判断字符串常量)
- java语言实现红黑树 仅仅实现了插入算法
- 排序算法——快速排序
- Linux中变量#,@,0,1,2,*,$$,$?的含义
- git命令大全
- PHP正则表达式匹配中文
- 工作总结22 firefox 阻止此页面创建其他对话框的解决方法
- 修改GitHub上项目语言显示的问题
- C语言:3*3棋盘实现三子棋