[previous] 3848 [next] Implicit conversion: unsigned long to long long.
Arithmetic type - Implicit conversions

An expression of type unsigned long 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 long.


/*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 long n)
{
    signed long long f = n;     /* Message 3848 - Initialization */

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

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

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

See also:

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