Path: utzoo!utgpu!news-server.csri.toronto.edu!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: Re: Compound Assignments (was Re: Another error!) Message-ID: <1991Apr9.145117.15100@dvorak.amd.com> Date: 9 Apr 91 14:51:17 GMT References: <1991Apr4.205257.15205@mccc.edu> <1991Apr6.195901.25255@dvorak.amd.com> <1991Apr7.185259.12709@druid.uucp> Sender: usenet@dvorak.amd.com (Usenet News) Reply-To: tim@amd.com (Tim Olson) Organization: Advanced Micro Devices, Austin, TX Lines: 35 In article <1991Apr7.185259.12709@druid.uucp> darcy@druid.uucp (D'Arcy J.M. Cain) writes: | In article <1991Apr6.195901.25255@dvorak.amd.com> Tim Olson writes: | >| x *= y; | >| 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): | > 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. | | Huh? Am I missing something or does that say that the two expressions | *ARE* evaluated differently? Yes, the two expressions you show are evaluated differently. I think the confusion here is that the two expressions you show aren't the two original expressions I was talking about -- they were (from the original article): | 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 Try substituting these two expressions into the discussion above, it should make more sense. -- -- Tim Olson Advanced Micro Devices (tim@amd.com)