Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Examples for 12.9 - unary minus operator
#1
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
<t>best regards,<br/>
Manni</t>
#2
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.
Posted by and on behalf of the MISRA C Working Group


Forum Jump:


Users browsing this thread: 1 Guest(s)