[net.lang.c] Rule of thumb for foo++

keie@vu44.UUCP (Ed Keizer) (01/09/84)

Mark Plotnick (mit-eddie!mp) mentioned
        ( (foo+=1) - 1 )
as a rule of the thumb for post-increment
operators like in
        foo++
and said that he didn't know any off-hand exceptions.
Well, I met one last year that shows one of the pitfalls of
overflow.
Assume that foo is declared as an unsigned short and that the
C compiler uses 32-bit int's. Now see what happens if we give
foo the value 0xFFFF.

foo++ delivers the value 0xFFFF, but
( (foo+=1) -1 ) delivers the value 0xFFFFFFFF,
because the result of (foo+=1) is 0 and not 0x10000.
The C reference manual is quite explicit here:
"The value ___of the assignment expression___ is the value
stored in the left operand after the assignment has taken place."

                                        Ed Keizer
                                        Vrije Universiteit
                                        Amsterdam
                                        ...!mcvax!vu44!keie