Associativity -- what is it?
Peter J. Holsberg
pjh at mccc.UUCP
Fri Feb 26 03:57:19 AEST 1988
In article <230 at sdrc.UUCP> scjones at sdrc.UUCP (Larry Jones) writes:
|In article <234 at mccc.UUCP>, pjh at mccc.UUCP (Peter J. Holsberg) writes:
|> In article <224 at sdrc.UUCP> scjones at sdrc.UUCP (Larry Jones) writes:
|> |In article <226 at mccc.UUCP>, pjh at mccc.UUCP (Peter J. Holsberg) writes:
|> |>
|> |> x = 3 * i ++;
|> |>
|> |> Book says that ++ has a higher precedence than *, and that ++
|> |> associates from R->L. That makes me think that ++ should be applied
|> |> first, but I know it isn't. But ????
|> |
|> |But ++ IS applied first! The key point here is that the RESULT of postfix
|> ^^^^^^^^^^^^^^^^^
|> |++ is the value BEFORE incrementation, not that postfix ++ is somehow deferred
|> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|> |until later.
|>
|> Well, that still leaves me confused. If i has the value 7, it is 7 that
|> is added to 3, so it seems to be that the ++ *is* deferred until later.
|> Also, ++ has higher precedence than +, so why is the incrementation
|> delayed until after the current value of i is used?
|
|The result of i++ is the value of i. In addition, i gets incremented. You
|can think of i++ as being like inc(&i) where inc() is defined as:
|
| int inc(ip)
| int *ip;
| {
| int j = *i;
| *i = *i + 1;
| return j;
| }
|
|So, it's not the ++ operator that's defered, it's the side effect of the
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|incrementation. You should also be aware that the incrementation can be
|defered for a long time - it may not happen until after the assignment.
|That's why i = i++ + 2; has no defined value -- you don't know whether the
|incrementation is done before or after the assignment.
|
???? Then what does the ++ operator-sans-side effect actually do??? It
looks like it does nothing.
--
Peter Holsberg UUCP: {rutgers!}princeton!mccc!pjh
Technology Division CompuServe: 70240,334
Mercer College GEnie: PJHOLSBERG
Trenton, NJ 08690 Voice: 1-609-586-4800
More information about the Comp.lang.c
mailing list