Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   incomplete struct in a struct (http://www.velocityreviews.com/forums/t529116-incomplete-struct-in-a-struct.html)

karthikbalaguru 08-14-2007 12:39 PM

incomplete struct in a struct
 
Hi,

struct sky {
int stars;
struct ocean *oceanptr;
};

struct ocean {
int waves;
struct sky *skyptr;
};

Will the compiler accept the field declaration struct ocean
*oceanptr within struct sky ?

Actually, the compiler has not yet heard of struct ocean till that
instant of time . ( struct ocean is ``incomplete'' at that point.) .

It has been stated that Just a empty declaration of the struct like
below will fix the issue -
struct sky;
struct ocean;

But, How is this possible ? What is happening here internally ? Is it
really like that ?

Thx in advans,
Karthik Balaguru


Chris Dollin 08-14-2007 01:10 PM

Re: incomplete struct in a struct
 
karthikbalaguru wrote:

> Hi,
>
> struct sky {
> int stars;
> struct ocean *oceanptr;
> };
>
> struct ocean {
> int waves;
> struct sky *skyptr;
> };
>
> Will the compiler accept the field declaration struct ocean
> *oceanptr within struct sky ?


This smells like homework.

Did you try this? What happened? What does your book/course notes say?

> Actually, the compiler has not yet heard of struct ocean till that
> instant of time . ( struct ocean is ``incomplete'' at that point.) .


Yes.

> It has been stated that Just a empty declaration of the struct like
> below will fix the issue -


What issue?

> struct sky;
> struct ocean;
>
> But, How is this possible ?


Compiler writers (and language designers) are dead smart. (Sometimes,
it must be said, too smart for their own good, or possibly for their
users' good.)

> What is happening here internally ?


The compiler notes that eg `oceanpointer` is a pointer to struct ocean,
and that it hasn't yet seen a definition for that struct. But it doesn't
need a definition of the struct to know about pointers to it.

> Is it really like that ?


Is what really like what?

--
Chris "is this a rhetorical question?" Dollin

Hewlett-Packard Limited Cain Road, Bracknell, registered no:
registered office: Berks RG12 1HN 690597 England


Barry Schwarz 08-18-2007 06:02 AM

Re: incomplete struct in a struct
 
On Tue, 14 Aug 2007 05:39:05 -0700, karthikbalaguru
<karthikbalaguru79@gmail.com> wrote:

>Hi,
>
>struct sky {
> int stars;
> struct ocean *oceanptr;


The standard requires that all pointers to struct, regardless of the
type of struct, have the same size, representation, alignment.
Therefore, even the compiler knows nothing about struct ocean, other
than that it is a struct of some kind, that is sufficient for the
compiler to properly place an object of type struct ocean* in struct
sky.

The real question is why didn't you just try it on your system. You
would have had your answer a lot faster than waiting for people on
Usenet to respond.

> };
>
>struct ocean {
> int waves;
> struct sky *skyptr;
> };
>
>Will the compiler accept the field declaration struct ocean
>*oceanptr within struct sky ?
>
>Actually, the compiler has not yet heard of struct ocean till that
>instant of time . ( struct ocean is ``incomplete'' at that point.) .
>
>It has been stated that Just a empty declaration of the struct like
>below will fix the issue -
>struct sky;
>struct ocean;
>
>But, How is this possible ? What is happening here internally ? Is it
>really like that ?
>
>Thx in advans,
>Karthik Balaguru



Remove del for email

Kenneth Brody 08-20-2007 05:49 PM

Re: incomplete struct in a struct
 
Barry Schwarz wrote:
[...]
> The real question is why didn't you just try it on your system. You
> would have had your answer a lot faster than waiting for people on
> Usenet to respond.

[...]

For the same reason you don't take your compiler's output of "i=i++"
to be definitive.

Besides, he also asked:

> What is happening here internally ?


And this cannot be answered simply by compiling.

--
+-------------------------+--------------------+-----------------------+
| Kenneth J. Brody | www.hvcomputer.com | #include |
| kenbrody/at\spamcop.net | www.fptech.com | <std_disclaimer.h> |
+-------------------------+--------------------+-----------------------+
Don't e-mail me at: <mailto:ThisIsASpamTrap@gmail.com>



karthikbalaguru 08-27-2007 06:53 AM

Re: incomplete struct in a struct
 
On Aug 14, 6:10 pm, Chris Dollin <chris.dol...@hp.com> wrote:
> karthikbalaguru wrote:
> > Hi,

>
> > struct sky {
> > int stars;
> > struct ocean *oceanptr;
> > };

>
> > struct ocean {
> > int waves;
> > struct sky *skyptr;
> > };

>
> > Will the compiler accept the field declaration struct ocean
> > *oceanptr within struct sky ?

>
> This smells like homework.
>
> Did you try this? What happened? What does your book/course notes say?
>
> > Actually, the compiler has not yet heard of struct ocean till that
> > instant of time . ( struct ocean is ``incomplete'' at that point.) .

>
> Yes.
>
> > It has been stated that Just a empty declaration of the struct like
> > below will fix the issue -

>
> What issue?
>
> > struct sky;
> > struct ocean;

>
> > But, How is this possible ?

>
> Compiler writers (and language designers) are dead smart. (Sometimes,
> it must be said, too smart for their own good, or possibly for their
> users' good.)
>
> > What is happening here internally ?

>
> The compiler notes that eg `oceanpointer` is a pointer to struct ocean,
> and that it hasn't yet seen a definition for that struct. But it doesn't
> need a definition of the struct to know about pointers to it.
>
> > Is it really like that ?

>
> Is what really like what?
>
> --
> Chris "is this a rhetorical question?" Dollin
>
> Hewlett-Packard Limited Cain Road, Bracknell, registered no:
> registered office: Berks RG12 1HN 690597 England


Thx for the info.
That is called "Forward reference to structure ocean" .The reference
is preceded
by the struct keyword to resolve potential ambiguity. Using an
identifier before its declaration is called a forward reference, and
results in an error, except in few cases and the above 'structure
case' is one such case which does not throw any error.

I am sharing some interesting stuff collected from internet w.r.t
writing optimised code related to this forward reference as below :
Allowing Forward reference can greatly increase the complexity and
memory requirements of a compiler, and generally prevents the compiler
from being implemented in one pass(one pass compilation).

Thx,
Karthik Balaguru


dk 08-29-2007 08:39 AM

Re: incomplete struct in a struct
 
On Aug 27, 11:53 am, karthikbalaguru <karthikbalagur...@gmail.com>
wrote:
> On Aug 14, 6:10 pm, Chris Dollin <chris.dol...@hp.com> wrote:
>
>
>
>
>
> > karthikbalaguru wrote:
> > > Hi,

>
> > > struct sky {
> > > int stars;
> > > struct ocean *oceanptr;
> > > };

>
> > > struct ocean {
> > > int waves;
> > > struct sky *skyptr;
> > > };

>
> > > Will the compiler accept the field declaration struct ocean
> > > *oceanptr within struct sky ?

>
> > This smells like homework.

>
> > Did you try this? What happened? What does your book/course notes say?

>
> > > Actually, the compiler has not yet heard of struct ocean till that
> > > instant of time . ( struct ocean is ``incomplete'' at that point.) .

>
> > Yes.

>
> > > It has been stated that Just a empty declaration of the struct like
> > > below will fix the issue -

>
> > What issue?

>
> > > struct sky;
> > > struct ocean;

>
> > > But, How is this possible ?

>
> > Compiler writers (and language designers) are dead smart. (Sometimes,
> > it must be said, too smart for their own good, or possibly for their
> > users' good.)

>
> > > What is happening here internally ?

>
> > The compiler notes that eg `oceanpointer` is a pointer to struct ocean,
> > and that it hasn't yet seen a definition for that struct. But it doesn't
> > need a definition of the struct to know about pointers to it.

>
> > > Is it really like that ?

>
> > Is what really like what?

>
> > --
> > Chris "is this a rhetorical question?" Dollin

>
> > Hewlett-Packard Limited Cain Road, Bracknell, registered no:
> > registered office: Berks RG12 1HN 690597 England

>
> Thx for the info.
> That is called "Forward reference to structure ocean" .The reference
> is preceded
> by the struct keyword to resolve potential ambiguity. Using an
> identifier before its declaration is called a forward reference, and
> results in an error, except in few cases and the above 'structure
> case' is one such case which does not throw any error.
>
> I am sharing some interesting stuff collected from internet w.r.t
> writing optimised code related to this forward reference as below :
> Allowing Forward reference can greatly increase the complexity and
> memory requirements of a compiler, and generally prevents the compiler
> from being implemented in one pass(one pass compilation).
>
> Thx,
> Karthik Balaguru- Hide quoted text -
>
> - Show quoted text -


"except in few cases and the above 'structure
case' is one such case which does not throw any error."

Can you list out other such cases please?

-Dk



All times are GMT. The time now is 09:52 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.