MISRA Discussion Forums

Full Version: Rule 13.3 incr/decr op with volatile
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello,

Code:
volatile int x;
x++; // non-compliant - because, x declared with volatile

In the above code, because 'x' variable is declared as volatile, I think it violates Rule 13.3. What do you think?
I believe that you are correct. Your example is similar to the non-compliant example in the rule
Code:
g ( u8b++ );
because both this and your example have another side-effect.

Personally, I think that Rule 13.3 falls into the realm of a style guide. The rationale points out that complying with Rule 13.3 avoids some undefined behaviour. However, the same undefined behaviour, and more, is also avoided by complying with Rule 13.2. Provided that Rule 13.2 is being followed, that leaves impairment of readability as the only other rationale for Rule 13.3. I'd say that's debatable and a matter of personal preference.

Since Rule 13.2 is required and Rule 13.3 is advisory, I'd be inclined not to apply Rule 13.3 if it's causing you a problem in this situation.
Steve Montgomery Wrote:Since Rule 13.2 is required and Rule 13.3 is advisory, I'd be inclined not to apply Rule 13.3 if it's causing you a problem in this situation.

Thank you for your reply. I agree with you. If it is simply a rule for readability, I think we need to change the title more intuitively.
Your example does violate rule 13.3. It can be rewritten as
Code:
x = x + 1;
which complies with both rules 13.2 and 13.3.
(03-02-2017, 03:35 PM)misra-c Wrote: [ -> ]Your example does violate rule 13.3.  It can be rewritten as
Code:
  x = x + 1;
which complies with both rules 13.2 and 13.3.

Hello, would you be able to explain why the above code snippet is compliant with 13.2 and 13.3? Is the rationale that it is not using ++/--?