[previous] 2896 [next] Definite: Negative value cast to an unsigned type.
Conversion to unsigned

A definite anomaly has been detected.

The value of an object or a non-constant expression is being cast to an unsigned type and dataflow analysis has determined that the value of the expression is always negative. Is this really intended ? The operation is well defined but is likely at best to be confusing.

The unsigned value which results will the be the value obtained by repeatedly adding or subtracting one more than the maximum value that can be represented in the new type until the value is in the range of the new type.

For example, in the following code, if unsigned char is an 8 bit type, the value assigned to ucx will be the value obtained by repeatedly adding 256 to the value of sia until a non-negative value is achieved..


/*PRQA S 2017,2983,2986,3199,3203,3227,3408 ++*/

void foo(int sia)
{
    unsigned char ucx;

    if (sia < 0)
    {
        ucx = (unsigned char)sia;               /* 2896 */
    }
}


MISRA C:2012 Rules applicable to message 2896:

Dir-1.1  (Required) Any implementation-defined behaviour on which the output of the program depends shall be documented and understood


See also:

QA·C Source Code Analyser 8.1
MISRA C:2012 Compliance Module 1.0
© 2012 Programming Research.
www.programmingresearch.com
Personality Groups | Glossary | Message Index | MISRA C:2012 Rule Index Contents