找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 548|回复: 8
收起左侧

C语言 为什么判断同一个数,switch不能判对,而if能呢

[复制链接]
ID:388929 发表于 2023-11-3 15:27 | 显示全部楼层 |阅读模式
问题如图,IR_Val的定义是uint32_t,case的程序是stm8能用的,我现在要移到stm32上,keil给我判错,请问有知道这是什么问题吗?先谢谢大家
1122.png
回复

使用道具 举报

ID:883242 发表于 2023-11-3 18:22 | 显示全部楼层
可以看一下生成的汇编代码。
回复

使用道具 举报

ID:883242 发表于 2023-11-3 18:50 | 显示全部楼层
在MDK中,右键项目,弹出options for target,然后在c/c++标签中的Misc Controls里面加上“--asm”就可以输出汇编文件了,在obj目录里面的s文件就是c语言对应的汇编。
回复

使用道具 举报

ID:213173 发表于 2023-11-3 18:54 | 显示全部楼层
switch()括号中只可以允许int、char、bool、enum类型,别的类型不可以。
回复

使用道具 举报

ID:883242 发表于 2023-11-3 19:00 | 显示全部楼层
wulin 发表于 2023-11-3 18:54
switch()括号中只可以允许int、char、bool、enum类型,别的类型不可以。

但是你说的跟楼主描述的完全相反,uint32_t在STM8编译器里面是long,不符合你的要求,但是人家好用。在MDK里面是unsigned int类型,楼主的数据最高位都是0,也就是说都是正数,与int类型完全等效。
回复

使用道具 举报

ID:388929 发表于 2023-11-4 15:36 | 显示全部楼层
Hephaestus 发表于 2023-11-3 18:50
在MDK中,右键项目,弹出options for target,然后在c/c++标签中的Misc Controls里面加上“--asm”就可以输 ...

大佬,我就学了下下汇编。。。好多年了,现在是看不懂的咯
1.png
2.png
回复

使用道具 举报

ID:388929 发表于 2023-11-4 15:53 | 显示全部楼层
难道是CASE只能是16位???
回复

使用道具 举报

ID:883242 发表于 2023-11-4 16:13 | 显示全部楼层
billaj 发表于 2023-11-4 15:53
难道是CASE只能是16位???

你贴的代码确实只比较了低16位,也可能高16位都一样,前面另外判断了,代码不全不能确定。
回复

使用道具 举报

ID:382454 发表于 2023-11-4 16:37 | 显示全部楼层
应该可以的,可能你这个数有点问题,,char 还是int还是浮点型。也可以把这几句单独在调试一下,就一目了然了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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