The only reason i++ and --i were invented is that that made it possible to generate more efficient code for the PDP-11 with simple-minded compilers. There's no reason for them nowadays as i +=1 is almost as short and most languages today also feature a proper for loop.
I think i++ is fine from a syntax point of view, so long as it's a stand-along statement, where it produces the same code as i += 1. But I try to avoid embedding increment operators within expressions that produce easily overlooked side effects.
access off end of array
Posted Mar 26, 2013 9:00 UTC (Tue) by khim (subscriber, #9252)
[Link]
Actually, the ++/PDP-11 connection is urban legend -- see "More History", paragraph 2 at this link:
Well, your own link shows that it's not an "urban legend" but more like oversimplification: This is historically impossible, since there was no PDP-11 when B was developed. The PDP-7, however, did have a few `auto-increment' memory cells, with the property that an indirect memory reference through them incremented the cell. This feature probably suggested such operators to Thompson; the generalization to make them both prefix and postfix was his own.
While factually incorrect (C design predates PDP-11) both "++" in C and
"(RX)+" in PDP-11's assembler come from the same source.
access off end of array
Posted Mar 26, 2013 16:04 UTC (Tue) by hummassa (subscriber, #307)
[Link]
I know for a fact the 6809 microprocessors had some instructions "load/store from pointer with post/pre-auto-increment/decrement" so that one of:
a = *b++
a = *++b
a = *b--
a = *--b
*b++ = a
*++b = a
*b-- = a
*--b = a
was a single instruction; they made easy to implement real fast stacks and queues, and zero-terminated strings (because "a = *b++" &c set the Z flag if the char was zero).
access off end of array
Posted Mar 26, 2013 16:52 UTC (Tue) by brouhaha (subscriber, #1698)
[Link]
Yes, but the 6809 came along much later than the PDP-11, so it's not relevant to discussion of where the C pre/post-increment/decrement operators came from.