Related articles |
---|
C Fronts whatis@gnu.ai.mit.edu (1991-08-04) |
Re: C Fronts MASLOV@VADIK.srcc.msu.su (1991-08-05) |
Re: C Fronts MASLOV@VADIK.srcc.msu.su (1991-08-07) |
Re: C Fronts kers@hplb.hpl.hp.com (Chris Dollin) (1991-08-08) |
Re: C Fronts henry@zoo.toronto.edu (1991-08-09) |
Newsgroups: | comp.compilers |
From: | henry@zoo.toronto.edu (Henry Spencer) |
Keywords: | C, optimize |
Organization: | U of Toronto Zoology |
References: | 91-08-032 |
Date: | Fri, 9 Aug 1991 18:14:01 GMT |
In article 91-08-032 Chris Dollin <kers@hplb.hpl.hp.com> writes:
>...it is *not* legal to index an
>array outside its bounds in C. For example, ``a[10][-1]'' is illegal, even
>though blindly performing the address calculation would get a reference
>inside the array.
This is not quite correct. C array indexing is defined in terms of adding
integers to pointers. (a[b] is *(a + b) by definition.) The results of
taking a pointer outside the array by this means are undefined -- not
"illegal", but "undefined", meaning that what happens is entirely the
compiler's choice. (There is one obscure exception, which I omit for
clarity.) Relying on undefined behavior is unwise, and the compiler is
technically allowed to reject such a program, but it is not required to
do so. In the example, it may quite legitimately generate code that does
indeed give you a reference within the array, without any complications.
Such a compiler is not defective.
--
Henry Spencer @ U of Toronto Zoology, henry@zoo.toronto.edu utzoo!henry
[Norman Diamond <diamond@tkov50.enet.dec.com> also pointed this out. Clearly
I should put my copy of the standard back in the bathroom so I read it again.
-John]
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.