扒一扒使用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吗???
真的要凌乱在风中了~~~~
奇葩?正常! xiaoyigechaos 发表于 2016-2-1 14:26
图一和图二没看懂你要说什么意思
图一和图二类似,都是将一个int的值直接赋值给了int*的类型 helloshi 发表于 2016-2-1 15:32
奇葩?正常!
图一和图二是将int的值赋值给了int*,这个按理来说应该是要报错的吧?图上图四是计算有问题,计算的结果应该是-1666才对,但是仿真的结果却是-28 本帖最后由 xuboluan 于 2016-2-1 17:22 编辑
{:biggrin:}楼主我看错了,不好意思 图一图二:http://www.amobbs.com/thread-5640740-1-1.html 图三图四:s32parameterCnt = 1*200*1000 =0x0D40= 3392
3392/(-120) = -28 这个ide就是奇葩,用ccs编译器 Lu.Shi 发表于 2016-2-1 17:13
图一和图二是将int的值赋值给了int*,这个按理来说应该是要报错的吧?图上图四是计算有问题,计算的结果 ...
楼主你不了解 C 语言的使用细节就把责任推到编译器头上?
C 语言里 ( 1*200*1000 ) 这种常量,默认为 16BIT 整形,结果当然不是你想象的长整型了!
试试这个:( 1l*200l*1000l ) 不知道你用的哪个编译器,看结果确实如楼上说的32bit long,16bit int,看下你的s32时怎么定义的吧。 helloshi 发表于 2016-2-1 19:12
图三图四:s32parameterCnt = 1*200*1000 =0x0D40= 3392
...
感谢分析,学习了,有实验了下每个对数据强制类型转换,计算结果正常了。 gaolf_2012 发表于 2016-2-2 12:08
不知道你用的哪个编译器,看结果确实如楼上说的32bit long,16bit int,看下你的s32时怎么定义的吧。 ...
s32 类型就是signed long,楼上分析的是对的,试验了下对数据强制类型转换了一下就正确了 EMC菜鸟 发表于 2016-2-2 09:12
楼主你不了解 C 语言的使用细节就把责任推到编译器头上?
C 语言里 ( 1*200*1000 ) 这种常量,默认为...
多谢分析,强制类型之后计算正确了
页:
[1]