Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sdd.hp.com!ucsd!ucbvax!POLY1.NIST.GOV!rbriber From: rbriber@POLY1.NIST.GOV Newsgroups: comp.sys.sgi Subject: cc Message-ID: <9009212036.AA17643@poly1.nist.gov> Date: 21 Sep 90 20:36:30 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 44 Mike Chapman writes: I have found a peculiarity in the MIPS C compiler that is more of a curiosity than a problem, but I wonder if someone could shed some light on it anyway, just for fun. Here is a sample program that exhibits the peculiar behavior: #include int a [2]; main() { int i; a[0] = 5; a[1] = 6; i = 0; printf("%d %d\n", a[i++], a[i++]); } Depending on the order of evaluation of function arguments, I would expect this code to generate "6 5" or "5 6". But instead it says "5 5", which confuses me a bit. Do all pre/post increment/decrement operators only take effect after the current source line, or what? I did check the value of 'i' on the next line, and it was indeed 2, so that part works. For C reference I only have the ancient K&R, which as far as I can tell does not formally specify when these operators are supposed to do their thing. For reference purposes, I ran this code on many platforms (6 different CPUs, 8 different compilers), and only the MIPS compiler came out with the "5 5" answer. (stuff deleted). ==================== Just a note that while cc gives "5 5", GNU's gcc compiler on our Iris gives "5 6". -- ---------------------------------------------------------------------------- | Adios Amoebas, | "I've tried and I've tried and I'm still mystified, | | Robert Briber | I can't do it anymore and I'm not satisfied." | | 224/B210 NIST | --Elvis | | Gaithersburg, MD |------------------------------------------------------| | 20899 USA | rbriber@poly1.nist.gov (Internet) | |(301) 975-6775(voice)| rbriber@enh.nist.gov (Internet) | |(301) 975-2128 (fax) | rbriber@nbsenh (Bitnet) | ----------------------------------------------------------------------------