[previous] 4443 [next] A non-constant expression of 'essentially unsigned' type (%1s) is being converted to a wider signed type, '%2s' on assignment.
Arithmetic type - Assignment

This message is issued whenever a non-constant expression of essentially unsigned type undergoes an assigning conversion to a wider signed integer type, i.e. the configured size (with -s option) of the unsigned type is lower than that of the signed type.

For example:


/*PRQA S 1-9999 ++*/
/*PRQA S 4443 --*/

void foo (int b);

int f4443 (unsigned short a)
{
  int sia = a;              /* 4443 */

  foo (a + 1u);             /* 4443 */

  sia = (a - 1u);           /* 4443 */

  return a;                 /* 4443 */
}

This message identifies a safe (widening) conversion, assuming the conversion is intentional. In this case it may be better to document the conversion with an explicit cast. Message 4446 is generated for other unsigned to signed conversions, highlighting potential data loss.


MISRA C:2012 Rules applicable to message 4443:

Rule-10.3  (Required) The value of an expression shall not be assigned to an object with a narrower essential type or of a different essential type category.


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