Board logo

标题: 报告一个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