Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!cs.utexas.edu!sun-barr!newstop!sun!amdcad!dvorak.amd.com!proton!tim From: tim@proton.amd.com (Tim Olson) Newsgroups: comp.lang.c Subject: Compound Assignments (was Re: Another error!) Message-ID: <1991Apr6.195901.25255@dvorak.amd.com> Date: 6 Apr 91 19:59:01 GMT References: <1991Apr4.205257.15205@mccc.edu> Sender: usenet@dvorak.amd.com (Usenet News) Reply-To: tim@amd.com (Tim Olson) Organization: Advanced Micro Devices, Austin, TX Lines: 28 In article <1991Apr4.205257.15205@mccc.edu> pjh@mccc.edu (Peter J. Holsberg) writes: | Where/how does the standard explain that an expression such as | | x[i++] *= y; | | has the "x[i++]" part evaluated only once, while an expression such as | | x *= y; | | has the "x" part evaluated twice, as in | | x = x * y; In the second example, "x" is not evaluated twice -- it is evaluated only once, just as in the first example. The standard says just this in 3.3.16.2 (Compound assignment): Semantics A compound assignment of the form E1 op= E2 differs from the simple assignment expression E1 = E1 op (E2) only in that the lvalue E1 is evaluated only once. -- -- Tim Olson Advanced Micro Devices (tim@amd.com)