Lu.Shi 发表于 2016-2-1 14:11:26

扒一扒使用MPLAB IDE时遇到的奇葩问题

本帖最后由 Lu.Shi 于 2016-2-1 14:11 编辑

使用MPLAB IDE的版本v8.80的时候遇到如下的问题,就是想不通,所以请广大坛友都扒一扒:
1. 如下一图所示,仅仅提示了一个warning:main.c; 302.7 illegal conversion of integer to pointer,编译成功


2. 如下二图所示仅提示一个warning:main.c; 302.7 illegal conversion of integer to pointer,编译成功

3. 如下三图和四图所示,使用该版本的simulate模式仿真,出现图四显示的结果,其中s32parameterCnt和FaultTemp的类型都是32位的有符号整形变量,然后1*200*1000/(-120)不应该等于-1666吗???

真的要凌乱在风中了~~~~

helloshi 发表于 2016-2-1 15:32:11

奇葩?正常!

Lu.Shi 发表于 2016-2-1 17:10:54

xiaoyigechaos 发表于 2016-2-1 14:26
图一和图二没看懂你要说什么意思

图一和图二类似,都是将一个int的值直接赋值给了int*的类型

Lu.Shi 发表于 2016-2-1 17:13:59

helloshi 发表于 2016-2-1 15:32
奇葩?正常!

图一和图二是将int的值赋值给了int*,这个按理来说应该是要报错的吧?图上图四是计算有问题,计算的结果应该是-1666才对,但是仿真的结果却是-28

xuboluan 发表于 2016-2-1 17:20:22

本帖最后由 xuboluan 于 2016-2-1 17:22 编辑

{:biggrin:}楼主我看错了,不好意思

helloshi 发表于 2016-2-1 19:07:22

图一图二:http://www.amobbs.com/thread-5640740-1-1.html

helloshi 发表于 2016-2-1 19:12:03

图三图四:s32parameterCnt = 1*200*1000         =0x0D40= 3392

                                             3392/(-120) = -28

gongxd 发表于 2016-2-2 08:22:52

这个ide就是奇葩,用ccs编译器

EMC菜鸟 发表于 2016-2-2 09:12:14

Lu.Shi 发表于 2016-2-1 17:13
图一和图二是将int的值赋值给了int*,这个按理来说应该是要报错的吧?图上图四是计算有问题,计算的结果 ...

楼主你不了解 C 语言的使用细节就把责任推到编译器头上?

C 语言里 ( 1*200*1000 ) 这种常量,默认为 16BIT 整形,结果当然不是你想象的长整型了!

试试这个:( 1l*200l*1000l )

gaolf_2012 发表于 2016-2-2 12:08:38

不知道你用的哪个编译器,看结果确实如楼上说的32bit long,16bit int,看下你的s32时怎么定义的吧。

Lu.Shi 发表于 2016-2-2 15:09:30

helloshi 发表于 2016-2-1 19:12
图三图四:s32parameterCnt = 1*200*1000         =0x0D40= 3392

                                 ...

感谢分析,学习了,有实验了下每个对数据强制类型转换,计算结果正常了。

Lu.Shi 发表于 2016-2-2 15:10:39

gaolf_2012 发表于 2016-2-2 12:08
不知道你用的哪个编译器,看结果确实如楼上说的32bit long,16bit int,看下你的s32时怎么定义的吧。 ...

s32 类型就是signed long,楼上分析的是对的,试验了下对数据强制类型转换了一下就正确了

Lu.Shi 发表于 2016-2-2 15:15:45

EMC菜鸟 发表于 2016-2-2 09:12
楼主你不了解 C 语言的使用细节就把责任推到编译器头上?

C 语言里 ( 1*200*1000 ) 这种常量,默认为...

多谢分析,强制类型之后计算正确了
页: [1]
查看完整版本: 扒一扒使用MPLAB IDE时遇到的奇葩问题