On 2008-04-24, Istvan Albert <[EMAIL PROTECTED]> wrote: > On Apr 23, 2:08 pm, Bob Woodham <[EMAIL PROTECTED]> wrote: > >> x = x++; >> >> has unspecified behaviour in C. That is, it is not specified >> whether the value of x after execution of the statement is the >> old value of x or one plus the old value of x. > > unspecified means that the result could be anything: old value, old > value+1, -2993882, "trallalla", core dump, stack overflow etc...
One would certainly hope there are only two possible results, the old value of x or the incremented value of x. I first encountered this issue with a C compiler that produced one of those two results differently depending on the level of optimization requested. (Ultimately, it boiled down to the issue of whether the compiler allocated x to a register or as a standard memory reference). Rather than it being a bug, I was surprised to discover that the C compiler had not, in fact, violated the ANSI C standard. Note that x can be a pointer of arbitrary type. Thus, it is not beyond the realm of possibilty that a result different from what the programmer expected might indeed produce, in the end, -2993882, "trallalla", core dump, stack overflow etc... I don't have a copy of the ISO/ANSI C spec at hand. Harbison and Steele, Jr., "C a Reference Manual (4th ed)," section 7.12.1, page 228, state, "In ISO C, if a single object is modified more than once between successive sequence points, the result is undefined." Assuming Harbison and Steele quote the 1990 spec correctly, the word I should have used is "undefined." Can you live with that? Aside: Yes, the issue is that x = x++; modifies the single object x more than once between successive sequence points. -- http://mail.python.org/mailman/listinfo/python-list