我得到一个Eclipse错误:转换为';uint16';从';int';可能会改变它的价值
我正在使用Eclipse for STM32,发现有许多与数字类型相关的错误。我用正确的返回类型定义了一个函数,但调用它时仍然会出错我得到一个Eclipse错误:转换为';uint16';从';int';可能会改变它的价值,c,C,我正在使用Eclipse for STM32,发现有许多与数字类型相关的错误。我用正确的返回类型定义了一个函数,但调用它时仍然会出错 uint8_t HEX_Parse(char c) //this one is ok uint16_t sum =(uint16_t)(HEX_Parse(Buffer[strlen(Buffer)-3])*16); //this one get an error sum += (uint16_t)HEX_Parse(Buffer[strlen(Bu
uint8_t HEX_Parse(char c)
//this one is ok
uint16_t sum =(uint16_t)(HEX_Parse(Buffer[strlen(Buffer)-3])*16);
//this one get an error
sum += (uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2]);
为什么??如何修复它?后一项任务与以下任务相同:
sum = sum + (uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2]);
表达式sum+(uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2])
,由于整数提升,实际上具有类型int
。
由于没有强制转换来进行显式转换,当int
表达式sum+(uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2])
被分配到sum
时,编译器警告从int
返回到uint16_t
的隐式转换
您应该对整个表达式进行转换:
sum = ( uint16_t )( sum + HEX_Parse(Buffer[strlen(Buffer)-2]) );
警告是正确的;转换可能会更改该值。类型为
uint16\u t
(通常相当于无符号short
)的表达式在执行任何算术之前升级为int
。因此,求和运算在int
类型中完成,然后转换为uint16\u t
。直接赋值将uint8\u t
转换为uint16\u t
,这是一种无损转换,因此不会引发警告(也不应该)。嘿,谢谢,我用你的方法解决了这个问题,我认为eclipse在语法上太严格了,因为我在工作时从其他IDE复制了这些句子。