找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1167|回复: 8
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
问题如图,IR_Val的定义是uint32_t,case的程序是stm8能用的,我现在要移到stm32上,keil给我判错,请问有知道这是什么问题吗?先谢谢大家

1122.png (20.66 KB, 下载次数: 42)

1122.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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类型,别的类型不可以。
回复

使用道具 举报

5#
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类型完全等效。
回复

使用道具 举报

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

大佬,我就学了下下汇编。。。好多年了,现在是看不懂的咯

1.png (89.47 KB, 下载次数: 51)

1.png

2.png (132.27 KB, 下载次数: 45)

2.png
回复

使用道具 举报

7#
ID:388929 发表于 2023-11-4 15:53 | 只看该作者
难道是CASE只能是16位???
回复

使用道具 举报

8#
ID:883242 发表于 2023-11-4 16:13 | 只看该作者
billaj 发表于 2023-11-4 15:53
难道是CASE只能是16位???

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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