MPLABX XC8 Compiler - implicit signed to unsigned conversion?

183 Views Asked by At

Why am I getting :

(373)implicit signed to unsigned conversion

by doing:

fan_on_hh = hh + fan_hh_increment

All fan_on_hh, hh and fan_hh_increment are unsigned char.

enter image description here

This post suggests to do this:

fan_on_hh = (unsigned char) hh + fan_hh_increment

But I keep getting the same warning by doing that.

Is there a way to stop these warnings?

2

There are 2 best solutions below

1
On BEST ANSWER

Integer types smaller than int (e.g. unsigned char) are promoted to int when an operation is performed on them. If all values of the original type can be represented as an int, the value of the smaller type is converted to an int.
So in your example hh and fan_hh_increment are promoted to int before the addition.
When you want to stop the warning, you had to cast the result to unsigned char:

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

As others have stated, you can cast the result of the addition, which is probably the right way to go about it. But if that message is particularly annoying, the manual suggests (section 4.5.3.1 Disabling Messages) adding some flags to the command line to disable it:

-Xparser -Wno-sign-conversion