Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > struct declaration query

Reply
Thread Tools

struct declaration query

 
 
CptDondo
Guest
Posts: n/a
 
      04-26-2007
I'm trying to figure out some code that uses structures, structures, and
more structures...

It's a bit of rat's nest, and I'm having some trouble sorting it all out.

The authors use a lot of the following 'declarations' in the various .h
files:

struct document;
struct document_view;
struct link;
struct session;
struct term_event;
struct terminal;
struct uri;
struct conv_table;

These aren't being used as a part of another structure; they're just
standalone declarations? statements?

I can't quite picture what these do.

What exactly would be the effect of those empty declarations?

Maybe that will help me trace the code....

--Yan
 
Reply With Quote
 
 
 
 
Drew Lawson
Guest
Posts: n/a
 
      04-26-2007
In article <(E-Mail Removed)>
CptDondo <(E-Mail Removed)> writes:
>I'm trying to figure out some code that uses structures, structures, and
>more structures...
>
>It's a bit of rat's nest, and I'm having some trouble sorting it all out.
>
>The authors use a lot of the following 'declarations' in the various .h
>files:
>
>struct document;
>struct document_view;
>struct link;
>struct session;
>struct term_event;
>struct terminal;
>struct uri;
>struct conv_table;
>
>These aren't being used as a part of another structure; they're just
>standalone declarations? statements?


They are incomplete types. Usually, the reason for putting those
in is that something in the file declares a pointer to one of them:

struct foo;
void useFoo(foo *fooPtr);

The compiler doesn't need the detail of the struct to deal with a
pointer. Any file that uses the fields inside these structs will
need a complete type defined.

Some libraries use this for encapsulation -- they give you a pointer
that you send back in every call, but no one outside the library
looks inside the struct.

>I can't quite picture what these do.
>
>What exactly would be the effect of those empty declarations?


They tell you, "These types exist and you don't need to know what
is inside them."



--
Drew Lawson | "But the senator, while insisting he was not
http://www.velocityreviews.com/forums/(E-Mail Removed) | intoxicated, could not explain his nudity."
 
Reply With Quote
 
 
 
 
Ian Collins
Guest
Posts: n/a
 
      04-26-2007
CptDondo wrote:
> I'm trying to figure out some code that uses structures, structures, and
> more structures...
>
> It's a bit of rat's nest, and I'm having some trouble sorting it all out.
>
> The authors use a lot of the following 'declarations' in the various .h
> files:
>
> struct document;
> struct document_view;
> struct link;
> struct session;
> struct term_event;
> struct terminal;
> struct uri;
> struct conv_table;
>
> These aren't being used as a part of another structure; they're just
> standalone declarations? statements?
>

They are forward declarations, they let the compiler know that these
types exit. You will probably see use of pointers to these as function
parameters or structure members.

--
Ian Collins.
 
Reply With Quote
 
CptDondo
Guest
Posts: n/a
 
      04-26-2007
Drew Lawson wrote:

>> I can't quite picture what these do.
>>
>> What exactly would be the effect of those empty declarations?

>
> They tell you, "These types exist and you don't need to know what
> is inside them."


OK, thanks. That explains a lot.

The code uses a lot of structures with pointers to other structures, and
macros that define yet more pointers....

The parts I've figured out make sense... But it sure is complicated.

--Yan
 
Reply With Quote
 
Old Wolf
Guest
Posts: n/a
 
      04-26-2007
On Apr 27, 7:38 am, (E-Mail Removed) (Drew Lawson) wrote:
> CptDondo <(E-Mail Removed)> writes:
> >The authors use a lot of the following 'declarations' in the various .h
> >files:

>
> >struct document;
> >struct document_view;

>
> They are incomplete types. Usually, the reason for putting those
> in is that something in the file declares a pointer to one of them:
>
> struct foo;
> void useFoo(foo *fooPtr);


Should read:
void useFoo( struct foo *fooPtr );

If you write this code without the forward declaration, then
'struct foo' gets declared with "prototype scope", meaning
that any subsequent file-scope "struct foo" is actually a
different struct. (Don't ask me why).

 
Reply With Quote
 
Drew Lawson
Guest
Posts: n/a
 
      04-27-2007
In article <(E-Mail Removed) .com>
Old Wolf <(E-Mail Removed)> writes:
>On Apr 27, 7:38 am, (E-Mail Removed) (Drew Lawson) wrote:
>> CptDondo <(E-Mail Removed)> writes:
>> >The authors use a lot of the following 'declarations' in the various .h
>> >files:

>>
>> >struct document;
>> >struct document_view;

>>
>> They are incomplete types. Usually, the reason for putting those
>> in is that something in the file declares a pointer to one of them:
>>
>> struct foo;
>> void useFoo(foo *fooPtr);

>
>Should read:
> void useFoo( struct foo *fooPtr );


Sorry about that.
I'm lazy and hate typing 'struct' all the time, so I have been doing
typedefs for all my structs forever. That seems to have made my
posting a bit sloppy.

>If you write this code without the forward declaration, then
>'struct foo' gets declared with "prototype scope", meaning
>that any subsequent file-scope "struct foo" is actually a
>different struct. (Don't ask me why).


That's a new one. I'm not sure I should try to understand that on
a Friday afternoon.


--
Drew Lawson For it's not the fall, but landing,
(E-Mail Removed) That will alter your social standing
 
Reply With Quote
 
Kenneth Brody
Guest
Posts: n/a
 
      04-27-2007
Drew Lawson wrote:
>
> In article <(E-Mail Removed) .com>
> Old Wolf <(E-Mail Removed)> writes:

[...]
> >If you write this code without the forward declaration, then
> >'struct foo' gets declared with "prototype scope", meaning
> >that any subsequent file-scope "struct foo" is actually a
> >different struct. (Don't ask me why).

>
> That's a new one. I'm not sure I should try to understand that on
> a Friday afternoon.


In that case, try wrapping your head around this error message:

usenet.c(14) : warning C4133: 'function' : incompatible types -
from 'struct foobar *' to 'struct foobar *'

Here's the source:

==========
int foo(struct foobar *ptfoo)
{
return 42;
}

struct foobar
{
int a;
int b;
};

int bar(struct foobar *ptbar)
{
return foo(ptbar);
}
==========

When compiling in ANSI mode, the "struct foobar *" type of the
parameter to foo() is not the same "struct foobar *" type of the
parameter to bar().

--
+-------------------------+--------------------+-----------------------+
| Kenneth J. Brody | www.hvcomputer.com | #include |
| kenbrody/at\spamcop.net | www.fptech.com | <std_disclaimer.h> |
+-------------------------+--------------------+-----------------------+
Don't e-mail me at: <(E-Mail Removed)>

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Can *common* struct-members of 2 different struct-types, that are thesame for the first common members, be accessed via pointer cast to either struct-type? John Reye C Programming 28 05-08-2012 12:24 AM
struct declaration into another struct slocum C++ 3 04-11-2008 09:42 AM
Initialize pointer-to-struct declaration to an unnamed struct? Ehud Shapira C++ 20 06-30-2007 04:10 PM
maxplusII error: a deferred constant declaration without a full declaration is not supported Noah VHDL 5 04-07-2006 02:34 PM
struct my_struct *p = (struct my_struct *)malloc(sizeof(struct my_struct)); Chris Fogelklou C Programming 36 04-20-2004 08:27 AM



Advertisments