标题: C语言 为什么判断同一个数,switch不能判对,而if能呢 [打印本页]

作者: billaj    时间: 2023-11-3 15:27
标题: C语言 为什么判断同一个数,switch不能判对,而if能呢
问题如图,IR_Val的定义是uint32_t,case的程序是stm8能用的,我现在要移到stm32上,keil给我判错,请问有知道这是什么问题吗?先谢谢大家

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

1122.png

作者: Hephaestus    时间: 2023-11-3 18:22
可以看一下生成的汇编代码。
作者: Hephaestus    时间: 2023-11-3 18:50
在MDK中,右键项目,弹出options for target,然后在c/c++标签中的Misc Controls里面加上“--asm”就可以输出汇编文件了,在obj目录里面的s文件就是c语言对应的汇编。
作者: wulin    时间: 2023-11-3 18:54
switch()括号中只可以允许int、char、bool、enum类型,别的类型不可以。
作者: Hephaestus    时间: 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类型完全等效。
作者: billaj    时间: 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, 下载次数: 52)

1.png

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

2.png

作者: billaj    时间: 2023-11-4 15:53
难道是CASE只能是16位???
作者: Hephaestus    时间: 2023-11-4 16:13
billaj 发表于 2023-11-4 15:53
难道是CASE只能是16位???

你贴的代码确实只比较了低16位,也可能高16位都一样,前面另外判断了,代码不全不能确定。
作者: univers    时间: 2023-11-4 16:37
应该可以的,可能你这个数有点问题,,char 还是int还是浮点型。也可以把这几句单独在调试一下,就一目了然了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1