incomplete struct in a struct

K

karthikbalaguru

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
 
C

Chris Dollin

karthikbalaguru said:
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?
 
B

Barry Schwarz

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
 
K

Kenneth Brody

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:[email protected]>
 
K

karthikbalaguru

This smells like homework.

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


What issue?



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.)


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 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
 
D

dk

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top