cimplicit-conversionxc8mplab-x

MPLABX XC8 Compiler - implicit signed to unsigned conversion?


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?


Solution

  • 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);