首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

报告一个C编译器下的“BUG”

报告一个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。
返回列表