[previous] 4044 [next] unsigned int value returned from long long %s().
Arithmetic type - Implicit conversions

An expression of type unsigned int is being implicitly converted to type signed long long. Implicit type conversions from an unsigned type to a signed type are not recommended.

There are 2 situations to consider:
  1. If the two types happen to be implemented in the same number of bits, there is a danger of data loss because the unsigned value may not be representable in the signed type
  2. If the signed type is larger than the unsigned type, the value of the expression will be preserved. In these circumstances, the conversion message can be suppressed by "switching off" the "strictsignedness" option (-ss-).

Implicit type conversions of this nature can occur in the context of: This message may also occur in balancing operations, but only if type long long is larger than type int.


/*PRQA S 2017,3197,3199,3203,3227,3408,3447,3602,3625 ++*/
/****************************
 * OPTIONS: -ex LONGLONG
 ****************************/

extern void ef(signed long long f);

extern signed long long foo(unsigned int n)
{
    signed long long f = n;     /* Message 3844 - Initialization */

    f = n;                      /* Message 3844 - Assignment */

    ef(n);                      /* Message 3844 - Function argument */

    return n;                   /* Message 4044 - Function return */
}

See also:

QA·C Source Code Analyser 8.1.2
© 2013 Programming Research.
www.programmingresearch.com
Personality Groups | Glossary | Message Index Contents