![]() |
![]() |
4121 | ![]() |
||||
![]() | |||||||
| Arithmetic type - Complex expressions | |||||||
The value of an expression of integral type is being cast to a wider integral type. Don't be deceived into thinking that the expression itself is evaluated in the wider type. Message 4121 is generated when the value resulting from some specific operators is of type int or unsigned int and is explicitly cast to a larger integral type. The only operators which may trigger this message are ~ * / + - and <<. The danger associated with this kind of operation is that the programmer may assume, incorrectly, that the operation is performed in the wider type to which the expression is ultimately converted. In the following examples, message 4121 will only be generated if the size of type long is greater than the size of type int.
/*PRQA S 584,2017,2100,3103,3120,3198,3199,3203,3408,3447 ++*/
/*************************************
* OPTIONS: -s int=16
************************************/
extern unsigned int uia;
extern unsigned int uib;
extern unsigned char uca;
extern unsigned char ucb;
extern void foo(void)
{
unsigned long ula;
ula = (unsigned long)(~uia); /* Message 4121 */
ula = (unsigned long)(uia * uib); /* Message 4121 */
ula = (unsigned long)(uia / uib); /* Message 4121 */
ula = (unsigned long)(uia % uib); /* */
ula = (unsigned long)(uia + uib); /* Message 4121 */
ula = (unsigned long)(uia - uib); /* Message 4121 */
ula = (unsigned long)(uia & uib); /* */
ula = (unsigned long)(uia | uib); /* */
ula = (unsigned long)(uia ^ uib); /* */
ula = (unsigned long)(uia << 2); /* Message 4121 */
ula = (unsigned long)(uib >> 2); /* */
ula = (unsigned long)(~uca); /* Message 4121 */
ula = (unsigned long)(uca * ucb); /* Message 4121 */
ula = (unsigned long)(uca / ucb); /* Message 4121 */
ula = (unsigned long)(uca % ucb); /* */
ula = (unsigned long)(uca + ucb); /* Message 4121 */
ula = (unsigned long)(uca - ucb); /* Message 4121 */
ula = (unsigned long)(uca & ucb); /* */
ula = (unsigned long)(uca | ucb); /* */
ula = (unsigned long)(uca ^ ucb); /* */
ula = (unsigned long)(uca << 2); /* Message 4121 */
ula = (unsigned long)(ucb >> 2); /* */
ula = ~uia; /* Message 4120 */
ula = uia * uib; /* Message 4120 */
ula = uia / uib; /* Message 4120 */
ula = uia % uib; /* */
ula = uia + uib; /* Message 4120 */
ula = uia - uib; /* Message 4120 */
ula = uia & uib; /* */
ula = uia | uib; /* */
ula = uia ^ uib; /* */
ula = uia << 2; /* Message 4120 */
ula = uib >> 2; /* */
ula = ~uca; /* Message 4120 */
ula = uca * ucb; /* Message 4120 */
ula = uca / ucb; /* Message 4120 */
ula = uca % ucb; /* */
ula = uca + ucb; /* Message 4120 */
ula = uca - ucb; /* Message 4120 */
ula = uca & ucb; /* */
ula = uca | ucb; /* */
ula = uca ^ ucb; /* */
ula = uca << 2; /* Message 4120 */
ula = ucb >> 2; /* */
}
No MISRA C:2012 Rules applicable to message 4121
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 |