标题:
报告一个C编译器下的“BUG”
[打印本页]
作者:
feitiandadao
时间:
2012-2-22 20:21
标题:
报告一个C编译器下的“BUG”
今天调试STM8S的时候,发现一个问题,放在这里,希望以后大家碰到时能引起注意!
环境:STVD 4.3.0 + COSMIC 4.2.4
如果两个16位的short型数据进行运算,最后结果为32位长整形时,COSMIC的内部库函数不会先扩展再运算,而是进行16位和16位运算,然后结果还是16位。最后再将16位扩展成32位。
例如:
int16_t s1, s2;
int32_t result;
result = s1 * s2;
如果s1 = 768, s2 = 128, 则这里的结果会成为-32768!(错误)
在这里必须写成:
result = (int32_t)s1 * (int32_t)s2;
这样结果就成了正确的98304。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0