提问人:Andras 提问时间:2/13/2023 最后编辑:MikeAndras 更新时间:4/28/2023 访问量:136
MPLABX XC8 编译器 - 隐式有符号到无符号的转换?
MPLABX XC8 Compiler - implicit signed to unsigned conversion?
问:
为什么我会得到:
(373)隐式有符号到无符号的转换
通过执行以下操作:
fan_on_hh = hh + fan_hh_increment
所有 和 是 。fan_on_hh
hh
fan_hh_increment
unsigned char
这篇文章建议这样做:
fan_on_hh = (unsigned char) hh + fan_hh_increment
但是我这样做不断得到同样的警告。
有没有办法阻止这些警告?
答:
1赞
xorFF
2/13/2023
#1
正如其他人所说,您可以投射加法的结果,这可能是正确的方法。但是,如果该消息特别烦人,手册建议(第 4.5.3.1 节禁用消息)在命令行中添加一些标志以禁用它:
-Xparser -Wno-sign-conversion
1赞
Mike
2/16/2023
#2
小于 (例如) 的整数类型在对它们执行操作时被提升为整数类型。如果原始类型的所有值都可以表示为 ,则较小类型的值将转换为 。
所以在你的示例中,并被提升到添加之前。
当您想要停止警告时,您必须将结果强制转换为:int
unsigned char
int
int
int
hh
fan_hh_increment
int
unsigned char
fan_on_hh = (unsigned char) (hh + fan_hh_increment);
评论
0赞
Andras
11/14/2023
它真的奏效了......我在阅读那篇文章时犯了一个错误......感谢您的更正。.
评论
int
+
int
+
+
fan_on_hh = (unsigned char)(hh + fan_hh_increment)
fan_on_hh = (hh + fan_hh_increment)&UCHAR_MAX
int
unsigned char