Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!rutgers!rochester!cornell!batcomputer!sun.soe.clarkson.edu!rpi!pawl20.pawl.rpi.edu!entropy From: entropy@pawl.rpi.edu (Math Student from Hell) Newsgroups: comp.lang.c Subject: warning: ambiguous assignment: assignment op taken Message-ID: <859@rpi.edu> Date: 8 Mar 89 10:27:03 GMT Sender: usenet@rpi.edu Distribution: usa Organization: Eaters of Wisdom Lines: 40 Consider this program: main() { int a=4, b=5; a=-b; printf("a=%d\tb=%d.\n",a,b); } When I compile this on our Sun 3/50 I get these warning messages: "foo.c", line 6: warning: ambiguous assignment: assignment op taken "foo.c", line 6: warning: old-fashioned assignment operator Which means that the a=-b was interpreted as a =- b and not as a = -b. And of course the output is: a=-1 b=5. And when I compile on out Sequent Balance 21000 (V3.0.14 DYNIX) I get no warning messages, but the same bogus output anyway. Now, K&R First Edition (1975?) says that a =- b is obsolete and that the correct form is a -= b, because it avoids this very ambiguity. I gave two questions: 1) Why did Sun (and Sequent, and anyone else who did it) write their compiler to make the *wrong* decision on this fifteen-year-old mistake? If =- was obsolete in the time of K&R1, why do these recent compilers assume that =- is what was intended in the ambiguous code? 2) What does the ANSI standard have to say about the old-fashioned assignment operators? Email replies only, please; I will summarize. In some sense, a stochastic process can do better; at least it has a chance. S. M-J. C. Dominus entropy@pawl.rpi.EDU entropy@rpitsmts (BITnet)