|
|
Harald van =?UTF-8?b?RMSzaw==?= wrote:
>
> On Fri, 28 Mar 2008 16:44:12 -0500, pete wrote:
> > Ioannis Vranos wrote:
> >> K&R2 mentions the following:
> >>
> >> "printf("%d %d\n", ++n, power(2,n)); /* WRONG */
> >>
> >> can produce different results with different compilers,
> >> depending on
> >> whether n is incremented before power is called".
> >>
> >> That's why I call it implementation-defined behaviour.
> >
> > It's unspecified behavior.
> > The power(2,n) function call,
> > introduces a sequence point that the other
> > code examples don't have. This is all about sequence points.
>
> If arguments are evaluated strictly from left to right (nothing wrong
> with that), here are the steps:
> - evaluate "%d %d\n"
> - evaluate ++n
> - evaluate 2
> - evaluate n
> * call power
> * call printf
The call to printf starts before any of its arguments are evaluated.
power returns before printf does.
> There is not necessarily
> any sequence point between the evaluation of ++n
> and the evaluation of n, unless I'm missing something.
There are only two different outputs that the above quoted
C statement can produce.
The choices need not be documented.
That's unspecified behavior.
--
pete
|
|