硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1259|回复: 2
收起左侧

[客户分享] 记录一个switch...case的说明

[复制链接]

17

主题

83

回帖

134

积分

初级会员

积分
134
发表于 2024-5-24 18:04:04 | 显示全部楼层 |阅读模式
本帖最后由 fantasyhpu 于 2024-5-24 18:05 编辑

对于C51编译器:
在C语言的switch...case结构中,switch后面跟着表达式,例如:
[C] 纯文本查看 复制代码
switch(表达式)
{
    //case
}

这里的表达式,不能是逻辑表达式,尽管逻辑表达式的值只有两个值:0和1
例如下面的代码中,尽管逻辑表达式ch>='a'&&ch<='z'只有0或1两个值,但是实际运行时,永远不会进入case 0或case 1。原因似乎是ch>='a'&&ch<='z'运算后的结果,即0或1,是逻辑0或逻辑1,这与case后面的整数0或1似乎不是一回事。
[C] 纯文本查看 复制代码
switch(ch>='a'&&ch<='z')
{
        case 0:ch=ch+32;break;
        case 1:ch=ch-32;break;
}

为解决这一问题,可以对ch>='a'&&ch<='z'进行强制类型转换,例如下面三种强制类型转换均可以:
[C] 纯文本查看 复制代码
switch((char)(ch>='a'&&ch<='z'))
switch((unsigned char)(ch>='a'&&ch<='z'))
switch((unsigned int)(ch>='a'&&ch<='z'))

但是,若用(int)对ch>='a'&&ch<='z'进行强制类型转换则不可以,即:
[C] 纯文本查看 复制代码
switch((int)(ch>='a'&&ch<='z'))


以上说明经过了C51编译器的测试。

评分

参与人数 1金币 +50 收起 理由
eric2013 + 50 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-5-25 08:06:25 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2024-6-11 09:07:14 | 显示全部楼层
很奇怪,无法理解。 switch应该是根据数值来进行跳转的,int是个数值,char也是个数字,要不试试用uint来试试?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 16:22 , Processed in 0.038327 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表