Article View: comp.std.c
Article #2677Re: More Re: Function Argument Evaluation argument
From: Paul D. Smith
Date: Wed, 03 Apr 1991 04:39
Date: Wed, 03 Apr 1991 04:39
62 lines
3035 bytes
3035 bytes
[ Hopefully I understand what you're saying here; if not please correct
me... ]
[] On 2 Apr 91 13:24:16 GMT, volpe@camelback.crd.ge.com (Christopher R Volpe) said:
CRV> In article <RJOHNSON.91Apr1142143@olorin.shell.com>, rjohnson@shell.com
CRV> (Roy Johnson) writes:
CRV> |>
CRV> |> int v=1;
CRV> |> printf("%d %d\n", (1, v), (1,v++));
CRV> |>
CRV> |>This can print
CRV> |> 1 1
CRV> |>or
CRV> |> 2 1
CRV> Hey, that looks pretty good. No matter what the order of
CRV> evaluation of the function arguments is, there's always a
CRV> sequence point separating the references to v. So the behavior is
CRV> not undefined, yet order of evaluation definitely has a drastic
^^^^^^^^^^^^^
CRV> effect on the output.
The behavior *is* indeed undefined in this case:
Reference 1: ANSI X3.159-1989 Section 2.1.2.3, p. 8, lines 33-35:
"At certain specified points in the execution sequence called
_sequence points_, all side effects of previous evaluations shall
^^^^^^^^^^^^^^^^^^^^^
be complete and no side effects of subsequent evaluations shall
have taken place."
Reference 2: Ibid, Section 3.3.2.2, p. 42, lines 20-21:
"The order of evaluation of the function designator, the arguments,
^^^^^^^^^^^^^^^^^^^
and subexpressions within the arguments is unspecified, ... "
^^^^^^^^^^^
So given the following statement:
printf("%d %d\n", (1, v), (1, v++));
^^^^^^ ^^^^^^^^
exp. 1 exp.2
The compiler is free to choose whether to evaluate exp.1 first, or
whether to evaluate exp.2 first. Once it chooses it must indeed
evaluate the "1" first, before the "v" or "v++".
So it's still undefined whether this prints "1 1" or "2 1". And
rightly so, IMHO!
paul
-----
------------------------------------------------------------------
| Paul D. Smith | pds@lemming.webo.dg.com |
| Data General Corp. | |
| Network Services Development Division | "Pretty Damn S..." |
| Open Network Systems Development | |
------------------------------------------------------------------
Technical Details
Message-ID:
<PDS.91Apr2203927@lemming.webo.dg.com>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!apple!netcom!amdcad!dgcad!dg-rtp!webo!dg-webo!pdsReferences:
<17936@crdgw1.crd.ge.com> <15607@smoke.brl.mil> <RJOHNSON.91Apr1142143@olorin.shell.com> <18140@crdgw1.crd.ge.com>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!apple!netcom!amdcad!dgcad!dg-rtp!webo!dg-webo!pds From: pds@lemming.webo.dg.com (Paul D. Smith) Newsgroups: comp.std.c Subject: Re: More Re: Function Argument Evaluation argument Message-ID: <PDS.91Apr2203927@lemming.webo.dg.com> Date: 3 Apr 91 04:39:27 GMT References: <17936@crdgw1.crd.ge.com> <15607@smoke.brl.mil> <RJOHNSON.91Apr1142143@olorin.shell.com> <18140@crdgw1.crd.ge.com> Sender: usenet@webo.dg.com (Usenet Administration) Organization: NSDD/ONSD, Data General Corp., Westboro, MA Lines: 61 In-Reply-To: volpe@camelback.crd.ge.com's message of 2 Apr 91 13:24:16 GMT