comp.lang.ada
 help / color / mirror / Atom feed
From: James Rogers <jimmaureenrogers@worldnet.att.net>
Subject: Re: type Foo_ptr in new void*;
Date: Mon, 30 Jul 2001 02:09:29 GMT
Date: 2001-07-30T02:09:29+00:00	[thread overview]
Message-ID: <3B64C26F.C195B4E0@worldnet.att.net> (raw)
In-Reply-To: 9k2btj$5hj$1@news.tpi.pl

Tomasz Wegrzanowski wrote:
> 
> In article <3B63F48A.2E2642C6@earthlink.net>, Marc A. Criley wrote:
> >> I can't do this.
> >> Foo is supposed to be used only as a pointer.
> >> I don't know if newer version of library will use the same Foo.
> >
> > In tmoran's post, wherever you saw "in out Foo", change it to "in
> > Foo_Pointer".
> >
> > In order to declare a pointer to a type, you have to have that type's
> > definition.  Even C requires that for "foo*" there be some declaration
> > of "foo".
> 
> Not true.
> You can use `struct Foo *' without declaring `struct Foo'.
> You can `typedef struct Foo Foo_t;' or `typedef struct Foo *Foo_p;'
> and use Foo_t and Foo_p w/o declaring `struct Foo'.

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.

In other words, you can declare some wonderful data structures in C
based on incomplete type definitions. Unfortunately, a program built
upon such a structure is neither reliable nor portable.

Ada does not allow you to compile a program with an incomplete type
definition. There is no equivalent because the existence of an
equivalent to this C capability would only introduce errors in your
program. There is nothing positive that can be achieved by allowing
a program to be incompletely specified.

I first realized the differences between C and Ada in this respect
when first learning Ada to support the development of debuggers for
in circuit emulators in 1994. I had to produce programs exhibiting
every data type you can produce from each language so that the
symbolic debug output of compilers, and recognition of the debuggers
could be verified. There was never a version of Ada that supported
incomplete type definition. 

Jim Rogers
Colorado Springs, Colorado USA



  parent reply	other threads:[~2001-07-30  2:09 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 [this message]
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
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