MISRA Discussion Forums

Full Version: Examples for 12.9 - unary minus operator
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi

Question about Rule 12.9: The unary minus operator shall not be applied to an expression whose underlying type is unsigned.

Code:
uint32_t u_int_a;
uint32_t u_int_b;

u_int_a = -u_int_b;
1. Is this incorrect?
2. Shows this example, what the rule 12.9 mean?



4. Is this correct? (a = int)
Code:
uint32_t int_a;
uint32_t u_int_b;

u_int_a = -(int32_t)u_int_b;


5. Is this correct, too? (a = uint)
Code:
uint32_t u_int_a;
uint32_t u_int_b;

u_int_a = -(int32_t)u_int_b;
6. I think it it is correct to rule 12.9, but breach 10.1. Right?


7. Have somebody good examples for rule breaks? And how to solve it?

best regards,
Manni
Code:
uint32_t u_int_a;
uint32_t u_int_b;

u_int_a = -u_int_b;


This is a violation of rule 12.9 since the underlying type of u_int_b is unsigned.

----

Code:
int32_t int_a;    /* changed from uint32_t */
uint32_t u_int_b;

int_a = -(int32_t)u_int_b; /* changed u_int_a to int_a */

This is allowed.

----

Code:
uint32_t u_int_a;
uint32_t u_int_b;

u_int_a = -(int32_t)u_int_b;


This is compliant with rule 12.9, but violates 10.1. because of the change of signedness on assignment.