MPLABX XC8 编译器 - 隐式有符号到无符号的转换?

MPLABX XC8 Compiler - implicit signed to unsigned conversion?

提问人:Andras 提问时间:2/13/2023 最后编辑:MikeAndras 更新时间:4/28/2023 访问量:136

问:

为什么我会得到:

(373)隐式有符号到无符号的转换

通过执行以下操作:

fan_on_hh = hh + fan_hh_increment

所有 和 是 。fan_on_hhhhfan_hh_incrementunsigned char

enter image description here

这篇文章建议这样做:

fan_on_hh = (unsigned char) hh + fan_hh_increment

但是我这样做不断得到同样的警告。

有没有办法阻止这些警告?

C 隐式转换 XC8 MPLAB-X

评论

1赞 Ted Lyngmo 2/13/2023
你会得到隐式转换到加法。int
2赞 Nate Eldredge 2/13/2023
“做”会将输入和结果提升到 。您必须强制转换的结果(注意的优先级低于强制转换)。有关更多信息,请参见 stackoverflow.com/questions/46073295/...+int++
1赞 chux - Reinstate Monica 2/13/2023
使用或也许.IMO,此警告不应发生,因为转换为已明确定义。- IOW,一种弱分析工具。fan_on_hh = (unsigned char)(hh + fan_hh_increment)fan_on_hh = (hh + fan_hh_increment)&UCHAR_MAXintunsigned char

答:

1赞 xorFF 2/13/2023 #1

正如其他人所说,您可以投射加法的结果,这可能是正确的方法。但是,如果该消息特别烦人,手册建议(第 4.5.3.1 节禁用消息)在命令行中添加一些标志以禁用它:

-Xparser -Wno-sign-conversion
1赞 Mike 2/16/2023 #2

小于 (例如) 的整数类型在对它们执行操作时被提升为整数类型。如果原始类型的所有值都可以表示为 ,则较小类型的值将转换为 。
所以在你的示例中,并被提升到添加之前。
当您想要停止警告时,您必须将结果强制转换为:
intunsigned charintintinthhfan_hh_incrementintunsigned char

fan_on_hh = (unsigned char) (hh + fan_hh_increment); 

评论

0赞 Andras 11/14/2023
它真的奏效了......我在阅读那篇文章时犯了一个错误......感谢您的更正。.