在某些情形下,我们需要根据一些已知的字符串进行相应的处理,比如根据从串口接收到字符串命令执行操作。

假如要通过串口控制某个设备的开启、关闭以及查询等功能,其控制命令 cmd 分别为 OPENCLOSE、 和QUERY

利用C语言标准库函数 int strcmp(const char *str1, const char *str2) 来找出每一个控制命令,然后执行相应的操作:

char cmd[10] = "OPEN";
if (0 == strcmp("OPEN", cmd))
{
    deviceOpen();
}
else if (0 == strcmp("CLOSE", cmd))
{
    deviceClose();
}
else if (0 == strcmp("QUERY", cmd))
{
    deviceQuery();
}
else
{
    return;
}

这种实现方法虽然也达到了目的,但似乎没有那么直观,如果控制命令较多时,容易产生混乱,增加了出错的几率。相对而言,switch 就清晰明了很多,那么能不能在 switch 中实现字符串的匹配呢?

在 C 语言中,switch 语句中的表达式必须是常量表达式,且必须是整型或者枚举类型,所以 switch 语句不能直接匹配字符串。重点来了,既然 switch 语句能够匹配枚举类型,那么创建一个包含所有控制命令的枚举类型,上述问题就迎刃而解了。

enum COMMAND { OPEN, CLOSE, QUERY };

enum COMMAND cmd = OPEN;

switch (cmd)
{
case OPEN:
	deviceOpen();
	break;

case CLOSE:
	deviceClose();
	break;

case QUERY:
	deviceQuery();
	break;

default:
	break;
}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐