comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@home.com>
Subject: Re: type Foo_ptr in new void*;
Date: Tue, 31 Jul 2001 05:02:05 GMT
Date: 2001-07-31T05:02:05+00:00	[thread overview]
Message-ID: <3B663BCD.A0CACD2@home.com> (raw)
In-Reply-To: 3B662129.D6055BAA@worldnet.att.net

James Rogers wrote:
> Tomasz Wegrzanowski wrote:
> > In article <3B64C26F.C195B4E0@worldnet.att.net>, James Rogers wrote:
> > > Yes, you are correct. C does allow you to forward declare a structure
> > > or a pointer without ever completing the definition. This is one of
> > > the nasty capabilities "provided" by C. You can even create an array
> > > of Foo *. However, pointer arithmetic from the start of this array
> > > produces unspecified behavior. What is the sizeof Foo? Since it is
> > > undefined, there is no correct answer to that question. Without a
> > > proper definition of the sizeof Foo, there can be no reliable pointer
> > > arithmetic.
> >
> > Correct answer is compilation error.
> > It's illegal to do pointer arith on void* or incomplete types.

Yes, that is correct (that it is illegal).

> It is illegal, but not necessarily caught by the compiler.
> This means that the correct answer is not compilation error.
> C compilers are actually pretty primitive in their understanding of
> data type completion. They rely on highly intelligent linkers to
> find all the completions. Unfortunately, linker diagnostic messages

Huh? What does linking have to do with pointer arithmetic and "incomplete
types"?  I remember some bad C compilers (Aztec C on the Mac comes to
mind), but even the ever forgiving HP C compiler would catch this 
kind of stuff (incomplete type and pointer arithmetic that is).

As far as allowing "undefined pointer arithmetic" without a compiler
warning or error, you need to cite specific compiler brands, and 
show examples. Otherwise this is just rubbish, as far as I can see.
I've only seen error messages when pointer arithmetic is required for
incompletely defined types.

> If you do not TRULY know the type of the data pointed to by a void*,
> and then you cast it to some type, expecting correct results, you
> will sometimes get a nasty surprise. Pointer arithmetic will be
> performed, but your view of the data will be incorrect due to
> poor alignment problems.

Of course. If you cast _any_ pointer to another pointer type, you
cannot expect the arithmetic to be necessarily the same! So what's
the point? All C programmers know this already.

You as the C programmer have said "I know what I'm doing and I want
you the compiler to treat this address as a pointer to type Z, and
by golly, you better do pointer arithmetic according to the Z type."

After that, are you really surprised that the C compiler generates
code that does arithmetic on the pointer by type Z?

> Jim Rogers
> Colorado Springs, Colorado USA

C compilers (as with the C language), do have "issues". But not the
one you've chosen here.

-- 
Warren W. Gay VE3WWG
http://members.home.net/ve3wwg



  reply	other threads:[~2001-07-31  5:02 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-07-29  4:31 type Foo_ptr in new void*; Tomasz Wegrzanowski
2001-07-29  5:56 ` tmoran
2001-07-29  8:57   ` Tomasz Wegrzanowski
2001-07-29 12:26     ` Marc A. Criley
2001-07-30  1:05       ` Tomasz Wegrzanowski
2001-07-30  1:20         ` tmoran
2001-07-30  2:09         ` James Rogers
2001-07-30  2:36           ` Warren W. Gay VE3WWG
2001-07-30  3:10             ` James Rogers
2001-07-31  2:14               ` Warren W. Gay VE3WWG
2001-07-31  1:21           ` Tomasz Wegrzanowski
2001-07-31  3:06             ` James Rogers
2001-07-31  5:02               ` Warren W. Gay VE3WWG [this message]
2001-07-31  7:22               ` Florian Weimer
2001-07-31  4:56           ` Darren New
2001-08-04  6:05             ` David Thompson
2001-08-05  2:27               ` Warren W. Gay VE3WWG
2001-07-29 13:40     ` Dale Stanbrough
2001-07-29 14:12 ` Florian Weimer
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox