By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,347 Members | 2,120 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,347 IT Pros & Developers. It's quick & easy.

incomplete struct in a struct

P: n/a
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

Aug 14 '07 #1
Share this Question
Share on Google+
5 Replies


P: n/a
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

Aug 14 '07 #2

P: n/a
On Tue, 14 Aug 2007 05:39:05 -0700, karthikbalaguru
<ka***************@gmail.comwrote:
>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
Aug 18 '07 #3

P: n/a
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:Th*************@gmail.com>
Aug 20 '07 #4

P: n/a
On Aug 14, 6:10 pm, Chris Dollin <chris.dol...@hp.comwrote:
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

Aug 27 '07 #5

P: n/a
dk
On Aug 27, 11:53 am, karthikbalaguru <karthikbalagur...@gmail.com>
wrote:
On Aug 14, 6:10 pm, Chris Dollin <chris.dol...@hp.comwrote:


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

Aug 29 '07 #6

This discussion thread is closed

Replies have been disabled for this discussion.