question to examples of rule 6.12.2

6.12 Expressions

Moderators: misra-c, david ward

Locked
Manni
Posts: 11
Joined: Mon Feb 20, 2006 12:28 pm

question to examples of rule 6.12.2

Post by Manni » Fri Jun 23, 2006 2:30 pm

Hi

In Rule 12.2
nested assignment statements
Assignments nested within expressions cause additional side effects. The best way to avoid any chance of this leading to a dependence on order of evaluation is to not embed assignments within expressions.

For example, the following is not recommended:
x = y = y = z / 3 ;
x = y = y++;
I don't understand, what could go wrong here:
1. x = y = y = z / 3 ;
2. x = y = y++;

If x = 1, y = 2, z = 3, I would say,

- for 1. the result for x is everytime 1
- for 2. the result for x is everytime 3

What could a compiler make different here?

thanks
best regards,
Manni

bmerkle
Posts: 9
Joined: Mon Nov 15, 2004 6:44 am

Post by bmerkle » Mon Jul 24, 2006 7:40 am

Hi Manni,

2. x = y = y++;

the problem with this is that the evaluation order of y = y++ is not defined.
So the result depends if you compiler evaluates from left_to_right or from right_to_left, and as this is not defined by the ISO standard, the behaviour of your statement/program is undefined.

kind regards,
Bernhard.

misra-c
Posts: 572
Joined: Thu Jan 05, 2006 1:11 pm

Post by misra-c » Tue Aug 22, 2006 5:11 pm

MISRA-C meeting 22-8-2006

Code: Select all

x = y = y = z;
There is both human confusion and undefined behaviour associated with nested assignment statements.

See ISO C 9899:1990 6.3 para. 2.

Keep it simple and write

Code: Select all

y = z;
x = y;
---
Posted by and on behalf of
the MISRA C Working Group

Locked

Return to “6.12 Expressions”