From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,b87849933931bc93 X-Google-Attributes: gid103376,public X-Google-Thread: fac41,b87849933931bc93 X-Google-Attributes: gidfac41,public X-Google-Thread: 109fba,b87849933931bc93 X-Google-Attributes: gid109fba,public X-Google-Thread: f43e6,b87849933931bc93 X-Google-Attributes: gidf43e6,public X-Google-Thread: 114809,b87849933931bc93 X-Google-Attributes: gid114809,public X-Google-Thread: 1108a1,b87849933931bc93 X-Google-Attributes: gid1108a1,public From: ark@research.att.com (Andrew Koenig) Subject: Re: OO, C++, and something much better! Date: 1997/01/20 Message-ID: #1/1 X-Deja-AN: 211948725 references: <5bie2d$eat$1@news.nyu.edu> organization: AT&T Research, Murray Hill NJ newsgroups: comp.lang.c++,comp.lang.smalltalk,comp.lang.eiffel,comp.lang.ada,comp.object,comp.software-eng Date: 1997-01-20T00:00:00+00:00 List-Id: In article <5bie2d$eat$1@news.nyu.edu> kenner@lab.ultra.nyu.edu (Richard Kenner) writes: > In article dewar@merv.cs.nyu.edu (Robert Dewar) writes: > >equally if you do something like > > (x = p; x < &p[10]; p += 3) > >you can find you have an infinite loop, all quite in accordance with the > >C semantics, although somewhat surprising. > This case must work. Such a reference to the end of an object is required > to be treated like a reference within the object. I haven't seen the original of this, but the fragment above appears to contain at least three mistakes (not counting the missing `for' as a mistake): 1. It probably should have said `x += 3' instead of `p += 3'; as it is, the loop will just keep incrementing p until something dire happens. 2. If we change `x += 3' to `p += 3,' it still won't work, because p will take on the value of &x[9], and then &x[12], which is undefined, assuming that p has 10 elements. 3. If p is indeed the name of a 10-element array, then &p[10] is undefined in C. Really! The reason is that it is defined as equivalent to *(p+10), and, although it is legal to create p+10, the effect of dereferencing it is undefined. So, formally speaking, &p[10] is supposed to be written as p+10. I hope I haven't derailed the discussion too much. -- --Andrew Koenig ark@research.att.com http://www.research.att.com/info/ark